打包工件而不发布它

时间:2015-02-11 15:22:05

标签: scala playframework sbt

我有一个多项目构建,我定义了一个应用程序,一个api库和一个api库的实现。

应发布API库。应该使用通用打包器插件打包应用程序(连同它的依赖项)。

lazy val app = project.in(file("."))
  .enablePlugins(PlayScala)
  .dependsOn(api, impl, client % "test->test")
  .aggregate(api, impl, client)
  .settings(commonSettings:_*)
  .settings(
    publishArtifact := false
  )

lazy val api =
  project.in(file("modules/api"))
    .settings(name := "app-api")

lazy val client = project.in(file("modules/client"))
  .dependsOn(api)
  .settings(name := "app-client")

lazy val impl = project.in(file("modules/impl"))
  .dependsOn(api)
  .settings(name := "app-impl")
  .settings(
    publishArtifact := false
  )

publishArtifact := false会阻止创建jar工件app-impl。这样做的结果是它未包含在diststage结果中。

是否有办法(设置publish := ()除外)以这样的方式配置项目,即它会生成工件但不发布它?

1 个答案:

答案 0 :(得分:1)

Here是禁用项目中的publishArtifact将禁用触发jar创建的原因:由于某种原因,所有pkgTasks(导致packagedArtifacts)取决于publishArtifact

的值

我不知道确切的原因是这种情况,但我认为有人认为,当您不想发布时,打包是一种浪费。显然,通用打包器捆绑所有文物的工作正在被绊倒,我不确定该修补程序是在插件中还是在sbt中。

无论哪种方式,我建议使用publish := (),作为一种替代方案,我发现更详细:

publishLocalConfiguration :=
  Classpaths.publishConfig(artifacts = Map(), ivyFile = None, checksums = Nil),
publishConfiguration :=
  Classpaths.publishConfig(artifacts = Map(), ivyFile = None, checksums = Nil)