当前位置: 首页 > 知识库问答 >
问题:

SBT:如何将一个胖罐子归档?

郑燕七
2023-03-14

我正在用一个胖罐子塑造一个码头工人的形象。我使用sbt-assembly插件构建jar,使用sbt-native-packager构建Docker映像。我对SBT不是很熟悉,我遇到了以下问题。

>

publish:=(发布依赖于程序集)。值

构建映像的步骤之一是复制胖罐子。由于assembly插件在target/scala\u whatever/projectname-assembly-X.X.jar中创建jar,因此我需要知道确切的scala\u whatever和jar名称。程序集似乎有一个键assemblyJarName,但我不确定如何访问它。我尝试了以下失败的方法

Cmd(“复制”、“目标/scala*/*.jar/app.jar”)

帮助

共有1个答案

吕宣
2023-03-14

回答我自己的问题,以下作品:

enablePlugins(JavaAppPackaging, DockerPlugin)

assemblyMergeStrategy in assembly := {
  case x => {
    val oldStrategy = (assemblyMergeStrategy in assembly).value
    val strategy = oldStrategy(x)
    if (strategy == MergeStrategy.deduplicate)
      MergeStrategy.first
    else strategy
  }
}

// Remove all jar mappings in universal and append the fat jar
mappings in Universal := {
  val universalMappings = (mappings in Universal).value
  val fatJar = (assembly in Compile).value
  val filtered = universalMappings.filter {
    case (file, name) => !name.endsWith(".jar")
  }
  filtered :+ (fatJar -> ("lib/" + fatJar.getName))
}

dockerRepository := Some("username")

import com.typesafe.sbt.packager.docker.{Cmd, ExecCmd}
dockerCommands := Seq(
  Cmd("FROM", "username/spark:2.1.0"),
  Cmd("WORKDIR", "/"),
  Cmd("COPY", "opt/docker/lib/*.jar", "/app.jar"),
  ExecCmd("ENTRYPOINT", "/opt/spark/bin/spark-submit", "/app.jar")
)

我完全覆盖docker命令,因为默认值添加了两个我不需要的脚本,因为我也覆盖了入口点。另外,默认的workdir是/opt/docker,这不是我想要放胖罐子的地方。请注意,默认命令由sbt控制台中的show dockerCommands显示。

 类似资料:
  • 我试图在NetBeans中建立一个胖罐子。当我点击clean时,它显示以下错误: C:\workspace\travel_agency\nbproject\build-impl.xml:63:源资源不存在:C:\workspace\travel_agency\dist\nblibraries.properties 然后单击错误,它会将我发送到build-imple.xml文件中的以下行:

  • 我的spring-boot项目如下所示: 应用程序包含main和一个实现WebMVCConfigurer的MvcConfig类: 当我运行:gradlew:application:bootrun=>时,一切都很好。 我的web目录是一个angularJS应用程序,gulp将其构建在一个dist库中。(我正在使用moowork节点和gulp gradle插件) 我知道我必须更改addResource

  • 在运行Java8和Gradle6.3的Linux机器上,我需要构建一个由库混合而成的fat jar,一些库来自Maven Central,其他库来自位于存储库根部的本地目录,以及我的和: 运行和之后,如果我可以看到JAR中没有包含任何依赖项。 我的最终目标是使我的项目可执行为。我该怎么解决这个?

  • 问题内容: 我已经阅读了很多关于此的文章/说明,并且花费了太多时间,但是所有内容要么太广泛,要么太具体。 这个问题实际上仅适用于我制作的Applet。它包含一个类,并需要其他2个Jar库。我已经将它们包括在项目中(多个项目,因为我已经在Netbeans和Eclipse中进行了尝试……很容易重新创建一个Class项目)。所有这些的关键是我的HTML / web项目不必处理多个Jar或引用它们。这也不

  • 我读了这么多关于这方面的文章/解释,花了太多时间,但所有的东西要么太宽泛,要么太具体。 这个问题实际上只适用于我制作的一个Applet。它包含一个类,需要另外两个Jar库。我已经在项目中包含了这些内容(多个项目,因为我已经在Netbeans和Eclipse中尝试过了...很容易重新创建一个类项目)。所有这一切的要点是,我的HTML/Web项目不应该必须处理多个Jar或引用它们。它也完全不是一个复杂

  • 如标题所示,我想知道如何修改以创建一个唯一的,其中包含所有依赖项(包括kotlin lib)。 我在Groovy中找到了这个示例: 但我不知道我怎么能用kotlin写,除了: