【问题标题】:Sbt generated docker container fails to package subprojectsbt生成的docker容器打包子项目失败
【发布时间】:2020-09-12 06:48:50
【问题描述】:

我有一个多项目 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 映像中提供依赖类。

【问题讨论】:

    标签: scala docker sbt sbt-native-packager finch


    【解决方案1】:

    回答我自己的问题,但事实证明这是sbt-native-packager 的默认行为,或者更确切地说是sbt,当依赖项目具有publishArtifact := false 设置时。

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

    关于这个问题的更多信息可以在这里找到:https://github.com/sbt/sbt-native-packager/issues/1221

    【讨论】:

      猜你喜欢
      • 2022-01-09
      • 2013-08-07
      • 2017-02-28
      • 1970-01-01
      • 2022-01-03
      • 2020-02-26
      • 2017-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多