【问题标题】:Scala, docker - how to set mainClass in multimodule application using sbt-native-packager?Scala,docker - 如何使用 sbt-native-packager 在多模块应用程序中设置 mainClass?
【发布时间】:2020-03-19 01:22:22
【问题描述】:

我在 Scala 中创建了一个多模块 sbt 项目。现在是:

  • 主项目 (main-service) 和 build.sbt 文件

  • 带有Main类的http模块

在我的sbt 文件中,我有:

lazy val root = (project in file("."))
  .aggregate(http)
  .settings(
    dockerBaseImage := "openjdk:jre-alpine",
    name := "main-service",
    libraryDependencies ++= Seq(

    )
  )
  .enablePlugins(JavaAppPackaging)
  .enablePlugins(DockerPlugin)
  .enablePlugins(AshScriptPlugin)

lazy val http = (project in file("http"))
  .settings(
    mainClass in Compile := Some("Main"),
    name := "main-http",
    libraryDependencies ++= Seq(    
    ))

如您所见,我想用docker 运行它。这个项目的图像创建得很好,但是当我创建docker run 时出现错误:

docker: Error response from daemon: OCI runtime create failed: container_linux.go:345: starting container process caused "exec: \"/opt/docker/bin/main-service\": stat /opt/docker/bin/main-service: no such file or directory": unknown.

我认为问题可能出在mainClass 行上。我在main-http/src/main/scala 目录中有我的Main 类,但看起来docker 没有看到它。

我应该如何移动这个Main 类或更改它的路径并正确运行它?

【问题讨论】:

    标签: scala docker sbt sbt-native-packager


    【解决方案1】:

    如果您想将主类保留在http 子项目中,您也需要将插件移动到该项目中,如下所示。

    lazy val root = (project in file("."))
      .aggregate(http)
      .settings(name := "main-service")
    
    lazy val http = (project in file("http"))
      .settings(
        mainClass in Compile := Some("Main"),
        dockerBaseImage := "openjdk:jre-alpine",
        name := "main-http",
        libraryDependencies ++= Seq()
      )
      .enablePlugins(JavaAppPackaging)
      .enablePlugins(DockerPlugin)
      .enablePlugins(AshScriptPlugin)
    
    

    插件必须在 Main 类所在的项目中启用。

    要构建 docker 映像,请执行

    sbt http/docker:publishLocal
    

    【讨论】:

    • 是的!这正是我所需要的。谢谢。
    猜你喜欢
    • 2020-11-07
    • 2017-10-03
    • 2014-07-01
    • 2017-03-18
    • 2014-12-01
    • 1970-01-01
    • 2015-10-03
    • 2014-01-09
    • 2016-10-21
    相关资源
    最近更新 更多