scala - SBT生成的Docker容器无法打包子项目

标签 scala docker sbt sbt-native-packager finch

我有一个包含以下项目的多项目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设置时,这是sbtpublishArtifact := false的默认行为。

一种对我有用的解决方法是将以上内容更改为publish/skip := true

有关此问题的更多信息,请参见:https://github.com/sbt/sbt-native-packager/issues/1221

关于scala - SBT生成的Docker容器无法打包子项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62005671/

相关文章:

docker - 恢复Grafana-docker永久卷的配置?

scala - SBT:多构建依赖/聚合项目中的覆盖设置

java - 为什么 sbt 程序集在更新依赖项时会抛出错误?

scala - 检查 arraytype 列是否包含 null

java - Protobuf 对象作为 Maps 中的键

docker - 在 docker compose 中命名服务以用作主机名

Docker 以 root 身份挂载卷

scala - 打包工件而不发布它

scala - 超越特质和 self 类型

java - 当我运行 scala 应用程序时如何修复 "NoClassDefFoundError: midterm/Main"?