mirror of https://github.com/sbt/sbt.git
Merge pull request #148 from alexarchambault/topic/standalone-launcher-artifact
Automatically publish the proguarded JAR...
This commit is contained in:
commit
b887677c0f
|
|
@ -25,3 +25,6 @@ env:
|
|||
- secure: miHFMwVRD/yjOLy794nOwc2lJTMyL5O0MXABT9ksg5ejQy1FrFVc2YH86Agp80W02/lGLGl0qWCiK1TBcs9q4Apt01nkD1a/0/iuTRm//bdhnu8BbRxFITf+2cyYJVytKPsF585aHldMv1rwZs3TDaTzEEecAEki5r50yyTVo7ycG0lVj9aVWXerKRMIT54Wb8M6nqbyRB1jGWT0ETNU13vOvQznPTUXQG5hsiKnGYRf8T3umOMdOHpV0rvdwYqAIMsikaAFcYCS5P/pLXMtmRHICH9KUG8TV/ST07p1BXtbBg9y1Q+lpnXotXh4ZNoWOp8B6v7fxJ/WlLYTDROWCiHJ4s2V4Di00db/nW4OWrEEBlrh7vJ/npZqyt9V9YeNv6alxi+DCESwusgvD4Cx5c3zh+2X6RB6BYwWHlFnd80rmsLe4R4fFUcc8E/ZR9vUFjP1CsQKqfJ5yfKR6V+n8jK8FjLpoaU9PHPo2H4V3FZM/fCLcxhE37vfaYI7/O7MqE/cdGpZIuz7g3c4toWCgNZJDn8iJCPmrgcbW5zbfDxvWU2K816ycgnUwSQ5dufrJpAbLNrjR1O8EPRkMDDp9bB7/4RVQvfDfP9GGoiHPHHgxGzY0Lf5bm+Bj1mRfB5/SXHd3IjhUCD9q7eD1/ANifEYALC5BJ4TB8RhQUPU8uM=
|
||||
- secure: 2/SSqa7A+aIzTJrMuqfK53QoHqes8HZPpIXUC9BH+bP2V2n7LqlFCnLZ9OSFfiJYfgeYMQDILpt8GTXHYc7JgM/N9xXpywrpYNDCYo7GMhqRyUPQOuK9044IRnZmme289Ut6ozHHptZUeZp/9DEUNZcPOxTN+KbzbHrUL+9l5BxnAxJ3e0HihxhmaINrla3T36EetdfINigarB9muyvuCRdRhZjwxsSF1fo5P+ZgWvAIDhPgNJH8eyjxHVbTabk7efPtWNWu0HjyOqJaIVk+TNjuQhvQPHKpYel0gVlCAfUjq7ZP8hZurfC6NjCFcnfTZ3d4R8GDcWJ47pgBWND8saIQOigNd7KHBPntD4fEJqgBSq3ZWakNBYzOtm8CxMGmiJHDCVqAEGzUG+lowN+SnPS2UluL3QtZ7oL/7MeJqCscH7sPwHtmZY+o0Muqo0ZJ2T2TzekQNYOAE7jeSzG1xOa/NNghny5fT+w6asPxfeolkMgyzuRFp1SLaLUf/XRV4fux0meGY9NIXso47xMSfAYVAAXT1FA2OOwmM1O4yvm3Ur95oEGDNw6z7MnWOSKS663WFwuw2cCaheCfAwvoa5jZUMWMbyUM/cBTgCaQdmETpvCzZzUr5Ls/nBXjyiTdJaQLZATr7HSGZHgYVmEAhVwBvuhTar/6VUZUMKGc2P4=
|
||||
- secure: NmXh4uxqvvqxYvOBOiXE131HajCYhJyd9+7kc1YjllRZVYG11YLah9Np7qnRUyugNOdcBnWVQGlfDHOFe8GHQsZKt5PvsIzxszTor0GeDQOePX3L4YXPkZRJatmoJJ0COxdI6weCAWkI6Zr934RsOndT0mO55gk9c6eeXCcLdNjAJ3izGQHy5Wb2KTzwMhBfwjdTQ0s65c1rzz5dZ/JODilWfTHiHsz+4sKwWVmAvXDTjePd0X3svX775ot23QesJgtaC/p0AKSLcHg3zEjKkJJvvLooQyNn/zU/bio/UatDZWXnNMsTBfEr3qUedjoOY65g3EX/vYlbNRkF3Itk0dpuPooTFmezJASI4ZpewBS9OvPZheMmU/dy5Bx//622x7p4MHyao9IvYmSX0C92VWEd3gwkSzKCJtBEz4Csd5BaGhzeL41di6NSVx4IEiehC9191G1wk4Yj7S2t69N6OdAJEq+znQlYISF5ogCqip7PuesBMYTW4FaIgpnfW/OYP6VpWW87ohw/dz/CcTzP9MzuoM249EHNZKTfnJrmPJBRYSn+W4y9sTgGElPhY1U/NVQ+C/9Fov1kHFD25WeTDPdZe6yCczaUrcvfTDitfo6qnWf8ZW5dJMXN744idaZ25AT/SGoCzkPXMe+us5XLTAOtrbBMP8NXLMv5OtU999E=
|
||||
branches:
|
||||
only:
|
||||
- master
|
||||
|
|
|
|||
44
build.sbt
44
build.sbt
|
|
@ -266,7 +266,49 @@ lazy val cli = project
|
|||
"-keep class coursier.cli.IsolatedClassLoader {\n public java.lang.String[] getIsolationTargets();\n}"
|
||||
),
|
||||
javaOptions in (Proguard, ProguardKeys.proguard) := Seq("-Xmx3172M"),
|
||||
artifactPath in Proguard := (ProguardKeys.proguardDirectory in Proguard).value / "coursier-standalone.jar"
|
||||
artifactPath in Proguard := (ProguardKeys.proguardDirectory in Proguard).value / "coursier-standalone.jar",
|
||||
artifacts ++= {
|
||||
if (scalaBinaryVersion.value == "2.10")
|
||||
Nil
|
||||
else Seq(
|
||||
Artifact(
|
||||
moduleName.value,
|
||||
"jar",
|
||||
"jar",
|
||||
"standalone"
|
||||
)
|
||||
)
|
||||
},
|
||||
packagedArtifacts <++= {
|
||||
(
|
||||
moduleName,
|
||||
scalaBinaryVersion,
|
||||
ProguardKeys.proguard in Proguard
|
||||
).map {
|
||||
(mod, sbv, files) =>
|
||||
if (sbv == "2.10")
|
||||
Map.empty[Artifact, File]
|
||||
else {
|
||||
val f = files match {
|
||||
case Seq(f) => f
|
||||
case Seq() =>
|
||||
throw new Exception("Found no proguarded files. Expected one.")
|
||||
case _ =>
|
||||
throw new Exception("Found several proguarded files. Don't know how to publish all of them.")
|
||||
}
|
||||
|
||||
Map(
|
||||
// FIXME Same Artifact as above
|
||||
Artifact(
|
||||
mod,
|
||||
"jar",
|
||||
"jar",
|
||||
"standalone"
|
||||
) -> f
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
lazy val web = project
|
||||
|
|
|
|||
|
|
@ -0,0 +1,6 @@
|
|||
package coursier.cli
|
||||
|
||||
// dummy app to keep proguard quiet in 2.10
|
||||
object Coursier {
|
||||
def main(args: Array[String]): Unit = {}
|
||||
}
|
||||
|
|
@ -48,6 +48,12 @@ case class CommonOptions(
|
|||
@Value("organization:name")
|
||||
@Short("E")
|
||||
exclude: List[String],
|
||||
@Help("Consider provided dependencies to be intransitive. Applies to all the provided dependencies.")
|
||||
intransitive: Boolean,
|
||||
@Help("Classifiers that should be fetched")
|
||||
@Value("classifier1,classifier2,...")
|
||||
@Short("C")
|
||||
classifier: List[String],
|
||||
@Help("Maximum number of parallel downloads (default: 6)")
|
||||
@Short("n")
|
||||
parallel: Int = 6,
|
||||
|
|
@ -58,6 +64,7 @@ case class CommonOptions(
|
|||
cacheOptions: CacheOptions
|
||||
) {
|
||||
val verbose0 = verbose.length - (if (quiet) 1 else 0)
|
||||
lazy val classifier0 = classifier.flatMap(_.split(',')).filter(_.nonEmpty)
|
||||
}
|
||||
|
||||
case class CacheOptions(
|
||||
|
|
|
|||
|
|
@ -169,7 +169,8 @@ class Helper(
|
|||
module,
|
||||
version,
|
||||
configuration = "default(compile)",
|
||||
exclusions = excludes
|
||||
exclusions = excludes,
|
||||
transitive = !intransitive
|
||||
)
|
||||
}
|
||||
|
||||
|
|
@ -287,14 +288,14 @@ class Helper(
|
|||
val res0 = Option(subset).fold(res)(res.subset)
|
||||
|
||||
val artifacts =
|
||||
if (sources || javadoc) {
|
||||
var classifiers = Seq.empty[String]
|
||||
if (classifier0.nonEmpty || sources || javadoc) {
|
||||
var classifiers = classifier0
|
||||
if (sources)
|
||||
classifiers = classifiers :+ "sources"
|
||||
if (javadoc)
|
||||
classifiers = classifiers :+ "javadoc"
|
||||
|
||||
res0.classifiersArtifacts(classifiers)
|
||||
res0.classifiersArtifacts(classifiers.distinct)
|
||||
} else
|
||||
res0.artifacts
|
||||
|
||||
|
|
|
|||
|
|
@ -45,6 +45,12 @@ object MavenRepository {
|
|||
"test" -> Seq("runtime")
|
||||
)
|
||||
|
||||
def defaultPublications(moduleName: String) = Seq(
|
||||
"compile" -> Publication(moduleName, "jar", "jar", ""),
|
||||
"docs" -> Publication(moduleName, "doc", "jar", "javadoc"),
|
||||
"sources" -> Publication(moduleName, "src", "jar", "sources")
|
||||
)
|
||||
|
||||
def dirModuleName(module: Module, sbtAttrStub: Boolean): String =
|
||||
if (sbtAttrStub) {
|
||||
var name = module.name
|
||||
|
|
@ -241,11 +247,7 @@ case class MavenRepository(
|
|||
proj <- Pom.project(xml)
|
||||
} yield proj.copy(
|
||||
configurations = defaultConfigurations,
|
||||
publications = Seq(
|
||||
"compile" -> Publication(module.name, "jar", "jar", ""),
|
||||
"docs" -> Publication(module.name, "doc", "jar", "javadoc"),
|
||||
"sources" -> Publication(module.name, "src", "jar", "sources")
|
||||
)
|
||||
publications = defaultPublications(module.name)
|
||||
)): (String \/ Project)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -79,10 +79,23 @@ case class MavenSource(
|
|||
overrideClassifiers match {
|
||||
case Some(classifiers) =>
|
||||
val classifiersSet = classifiers.toSet
|
||||
project.publications.collect {
|
||||
val publications = project.publications.collect {
|
||||
case (_, p) if classifiersSet(p.classifier) =>
|
||||
artifactOf(dependency.module, p)
|
||||
p
|
||||
}
|
||||
|
||||
val publications0 =
|
||||
if (publications.isEmpty)
|
||||
classifiers.map { classifier =>
|
||||
Publication(dependency.module.name, "jar", "jar", classifier)
|
||||
}
|
||||
else
|
||||
publications
|
||||
|
||||
publications0.map { p =>
|
||||
artifactOf(dependency.module, p)
|
||||
}
|
||||
|
||||
case None =>
|
||||
Seq(
|
||||
artifactOf(
|
||||
|
|
|
|||
|
|
@ -40,9 +40,14 @@ object MakeIvyXml {
|
|||
n
|
||||
}
|
||||
|
||||
val publicationElems = project.publications.map {
|
||||
case (conf, pub) =>
|
||||
var n = <artifact name={pub.name} type={pub.`type`} ext={pub.ext} conf={conf} />
|
||||
val publications = project
|
||||
.publications
|
||||
.groupBy { case (_, p) => p }
|
||||
.mapValues { _.map { case (cfg, _) => cfg } }
|
||||
|
||||
val publicationElems = publications.map {
|
||||
case (pub, configs) =>
|
||||
var n = <artifact name={pub.name} type={pub.`type`} ext={pub.ext} conf={configs.mkString(",")} />
|
||||
if (pub.classifier.nonEmpty)
|
||||
n = n % <x e:classifier={pub.classifier} />.attributes
|
||||
n
|
||||
|
|
|
|||
|
|
@ -70,8 +70,9 @@ object Tasks {
|
|||
sbt.Keys.thisProjectRef,
|
||||
sbt.Keys.projectID,
|
||||
sbt.Keys.scalaVersion,
|
||||
sbt.Keys.scalaBinaryVersion
|
||||
).map { (state, projectRef, projId, sv, sbv) =>
|
||||
sbt.Keys.scalaBinaryVersion,
|
||||
sbt.Keys.ivyConfigurations
|
||||
).map { (state, projectRef, projId, sv, sbv, ivyConfs) =>
|
||||
|
||||
val packageTasks = Seq(packageBin, packageSrc, packageDoc)
|
||||
val configs = Seq(Compile, Test)
|
||||
|
|
@ -89,24 +90,50 @@ object Tasks {
|
|||
None
|
||||
}
|
||||
|
||||
sbtArtifacts.collect {
|
||||
case Some((config, artifact)) =>
|
||||
val name = FromSbt.sbtCrossVersionName(
|
||||
artifact.name,
|
||||
projId.crossVersion,
|
||||
sv,
|
||||
sbv
|
||||
)
|
||||
def artifactPublication(artifact: sbt.Artifact) = {
|
||||
|
||||
val publication = Publication(
|
||||
name,
|
||||
artifact.`type`,
|
||||
artifact.extension,
|
||||
artifact.classifier.getOrElse("")
|
||||
)
|
||||
val name = FromSbt.sbtCrossVersionName(
|
||||
artifact.name,
|
||||
projId.crossVersion,
|
||||
sv,
|
||||
sbv
|
||||
)
|
||||
|
||||
config -> publication
|
||||
Publication(
|
||||
name,
|
||||
artifact.`type`,
|
||||
artifact.extension,
|
||||
artifact.classifier.getOrElse("")
|
||||
)
|
||||
}
|
||||
|
||||
val sbtArtifactsPublication = sbtArtifacts.collect {
|
||||
case Some((config, artifact)) =>
|
||||
config -> artifactPublication(artifact)
|
||||
}
|
||||
|
||||
val stdArtifactsSet = sbtArtifacts.flatMap(_.map { case (_, a) => a }.toSeq).toSet
|
||||
|
||||
// Second-way of getting artifacts from SBT
|
||||
// No obvious way of getting the corresponding publishArtifact value for the ones
|
||||
// only here, it seems.
|
||||
val extraSbtArtifacts = Option(artifacts.in(projectRef).getOrElse(state, null))
|
||||
.toSeq
|
||||
.flatten
|
||||
.filterNot(stdArtifactsSet)
|
||||
|
||||
// Seems that SBT does that - if an artifact has no configs,
|
||||
// it puts it in all of them. See for example what happens to
|
||||
// the standalone JAR artifact of the coursier cli module.
|
||||
def allConfigsIfEmpty(configs: Iterable[sbt.Configuration]): Iterable[sbt.Configuration] =
|
||||
if (configs.isEmpty) ivyConfs else configs
|
||||
|
||||
val extraSbtArtifactsPublication = for {
|
||||
artifact <- extraSbtArtifacts
|
||||
config <- allConfigsIfEmpty(artifact.configurations) if config.isPublic
|
||||
} yield config.name -> artifactPublication(artifact)
|
||||
|
||||
sbtArtifactsPublication ++ extraSbtArtifactsPublication
|
||||
}
|
||||
|
||||
// FIXME More things should possibly be put here too (resolvers, etc.)
|
||||
|
|
|
|||
Loading…
Reference in New Issue