我有一个多项目构建,我定义了一个应用程序,一个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
。这样做的结果是它未包含在dist
和stage
结果中。
是否有办法(设置publish := ()
除外)以这样的方式配置项目,即它会生成工件但不发布它?
答案 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)