sbt 在暂存或发布时不生成 bin 目录 docker + 其他问题

sbt not generating bin directory when staging or publishing docker + other questions

我遇到了标题中描述的直接问题,即 sbt 没有生成 bin 目录(ENTRYPOINT 脚本指向的目录)我 运行 docker:stagedocker:publishLocal.

我以前从未见过这种行为,所以我对如何继续有点迷茫,但我还应该提到,我设置这个项目的方式与往常不同。

项目设置如下,在其根目录下:

- infrastructure
 - app
  - build.sbt
  - target/...
 - another-project
- project
 - BuildDefinition.scala
 - plugins.sbt
 - build.properties
- build.sbt

在我的根 BuildDefinition.scala 中,我已经设置了我所有的项目定义,包括 app 项目,它没有暂存我需要的所有内容。

在根的build.sbt中,我只有:

sourcesInBase in ThisBuild := false

name := "fantasy-factory"

app 目录的 build.sbt 中,我 只有 Docker-related 东西:

dockerBaseImage in Docker := "java:8-jre"
mainClass := Some("akka.Main")
javaOptions in Universal ++= Seq("com.nv.microservice.as.cluster.ClusterEntryPoint")
version in Docker := "latest"
packageName in Docker := "basic-distributed-microservice"

在暂存时生成的几乎是我需要的一切……除了具有入口点脚本的 bin 目录之外的一切。所以我确实在 apptarget 目录下面看到了:

- target
 - docker
  - stage
   - opt
    - docker
     - conf
     - lib
     - (I would have expected to see bin here)
   - Dockerfile
 - Dockerfile

这让我很沮丧;任何建议表示赞赏。

我有一个类似的问题,我解决了将 in (Compile) 添加到 mainClass 键,如下所示。在您的 build.sbt 文件中:

lazy val root = (project in file("."))
.enablePlugins(JavaServerAppPackaging)
.enablePlugins(DockerPlugin)
.settings(
  name := "my-project",
  mainClass in (Compile) := Some("MyFQNMainClass"),
  version := "1.0.0.BUILD",
  dockerBaseImage := "azul/zulu-openjdk:8",
  dockerUpdateLatest := true,
  dockerExposedPorts := Seq(8080),
  dockerRepository := Some("myrepo")
)

scalaVersion := "2.11.8"

sbtVersion := "0.13.9"

...

我还有 plugins.sbt 文件(在 project 文件夹下):

logLevel := Level.Warn

dependencyOverrides += "org.scala-sbt" % "sbt" % "0.13.9"

addSbtPlugin("com.earldouglas" % "xsbt-web-plugin" % "2.1.0")

addSbtPlugin("com.typesafe.sbt" % "sbt-s3" % "0.8")

addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.1.4")

addSbtPlugin("io.spray" % "sbt-revolver" % "0.8.0")

build.properties 在与 plugins.sbt 相同的文件夹中:

sbt.version=0.13.9

希望对您有所帮助。