У меня есть файл 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.