Созданный sbt контейнер docker не может упаковать подпроект - PullRequest
1 голос
/ 25 мая 2020

У меня есть файл 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 framework. Я создаю изображение docker для API, используя sbt api/docker:publishLocal, а затем запускаю его локально. Однако похоже, что классы подпроекта utils не упакованы в окончательный контейнер, и в результате я получаю несколько типов исключений

java.lang.ClassNotFoundException:

. Для аналогичного проекта, у которого нет зависимости от подпроекта, все работает гладко, и у меня нет проблем.

Мне что-то не хватает в конфигурации плагина? Я думал, что .dependsOn() должен позаботиться о предоставлении зависимых классов в проекте docker image.

1 Ответ

1 голос
/ 26 мая 2020

Отвечу на свой вопрос, но оказалось, что это поведение по умолчанию sbt-native-packager, или, скорее, sbt, когда зависимый проект имеет настройку publishArtifact := false.

Обходной путь, который сработал для меня, заключался в изменении приведенного выше на publish/skip := true.

Подробнее об этой проблеме можно найти здесь: https://github.com/sbt/sbt-native-packager/issues/1221

...