sbt:避免 java 子项目中的多个组装/发布步骤

sbt: avoiding multiple assembly / publish steps in java subproject

我有一个 sbt (0.13.8) 项目和几个子项目,其中大部分是纯 Scala 的。它们交叉 assemblyed 和 published;

crossScalaVersions := Seq("2.10.6", "2.11.8")
releaseCrossBuild := true

到目前为止效果很好。

现在我正在添加一个 Java 子项目,它依赖于一些 Scala 子项目。但是,我找不到避免多次 assemblying 和 publishing 的方法。而以下

crossPaths := false

的效果是,最后我在 java 子项目中只有一个 jar,当我 运行

sbt +assembly

我仍然看到它适用于所有 Scala 版本。这我可以忍受,但是

sbt +assembly +publish

尝试多次发布同一个(java 子项目)工件。

有没有办法避免这个问题?

build.sbt:

scalaVersion := "2.11.7"

crossScalaVersions := Seq("2.10.5", "2.11.7")

lazy val scalaOnly = project
  .in(file("."))
  .aggregate(scalaPrj)
  .settings(
    packagedArtifacts := Map.empty
  )

lazy val scalaPrj = project
  .in(file("scala-prj"))

lazy val javaPrj = project
  .in(file("java-prj"))
  .dependsOn(scalaPrj)

lazy val javaOnly = project
  .in(file("java-dummy-aggregator"))
  .aggregate(javaPrj)
  .settings(
    crossScalaVersions := Seq("2.11.7"),
    packagedArtifacts := Map.empty
  )

发布前切换到 javaOnly:

;project javaOnly ;+publish