sbt 在暂存或发布时不生成 bin 目录 docker + 其他问题
sbt not generating bin directory when staging or publishing docker + other questions
我遇到了标题中描述的直接问题,即 sbt
没有生成 bin
目录(ENTRYPOINT
脚本指向的目录)我 运行 docker:stage
或 docker: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
目录之外的一切。所以我确实在 app
的 target
目录下面看到了:
- 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
希望对您有所帮助。
我遇到了标题中描述的直接问题,即 sbt
没有生成 bin
目录(ENTRYPOINT
脚本指向的目录)我 运行 docker:stage
或 docker: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
目录之外的一切。所以我确实在 app
的 target
目录下面看到了:
- 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
希望对您有所帮助。