gpt4 book ai didi

Scala,docker - 如何使用 sbt-native-packager 在多模块应用程序中设置 mainClass?

转载 作者:行者123 更新时间:2023-12-02 18:03:46 25 4
gpt4 key购买 nike

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

  • 主项目 ( main-service ) 与 build.sbt文件
  • 带有 Main 的 http 模块类(class)

  • 在我的 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类(class) main-http/src/main/scala目录,但看起来 docker 没有看到它。

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

    最佳答案

    如果你想将主类保留在 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

    关于Scala,docker - 如何使用 sbt-native-packager 在多模块应用程序中设置 mainClass?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59003242/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com