Sbt 生成的 docker 容器无法打包子项目
Sbt generated docker container fails to package subproject
我有一个多项目 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
我有一个多项目 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