我有一个多项目的build.sbt文件,其项目如下:
lazy val utils = (project in file("utils"))
.settings(
Seq(
publishArtifact := false
)).[...]
lazy val api = (project in file("api"))
.dependsOn(utils)
.settings(commonSettings: _*)
.enablePlugins(JavaAppPackaging, DockerPlugin)
.settings(publish := {})
.settings(
Seq(
packageName in Docker := "my-api",
dockerBaseImage := "java:8",
mainClass in Compile := Some("com.path.to.Main"),
publishArtifact := false,
unmanagedJars in Compile += file("jars/somejars.jar")
))
API建立在Finch框架之上。我使用sbt api/docker:publishLocal
为API创建了一个docker镜像,然后在本地运行它。但是,似乎utils
子项目类未与最终容器打包在一起,结果我得到了多个
java.lang.ClassNotFoundException:
例外类型。对于没有子项目依赖项的类似项目,一切运行顺利,我也没有问题。
我在插件配置中缺少什么吗?我以为.dependsOn()
应该在项目docker映像中提供依赖类。
回答我自己的问题,但是当从属项目具有sbt-native-packager
设置时,这是sbt
或publishArtifact := false
的默认行为。
对我有用的解决方法是将以上内容更改为publish/skip := true
。
有关此问题的更多信息,请参见:https://github.com/sbt/sbt-native-packager/issues/1221