为啥 sbt-native-packager 不生成 bin 目录?

Posted

技术标签:

【中文标题】为啥 sbt-native-packager 不生成 bin 目录?【英文标题】:Why does sbt-native-packager generate no bin directory?为什么 sbt-native-packager 不生成 bin 目录? 【发布时间】:2014-07-03 02:48:39 【问题描述】:

今天我将sbt-native-packager 集成到我的scala 项目中,主要是为了生成方便的执行脚本和/或包。

现在,我添加到我的build.sbt 行:

packageArchetype.java_application

还有我的plugins.sbt

resolvers += "sbt-plugins" at "http://scalasbt.artifactoryonline.com/scalasbt/sbt-plugin-releases"

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

当我调用sbt stage 时,我得到target/universal/stage 目录,但那里只有lib,没有带有脚本的bin(根据http://www.scala-sbt.org/sbt-native-packager/GettingStartedApplications/MyFirstProject.html 应该创建)。

我是否需要添加其他内容来获取带有脚本的bin 目录?

【问题讨论】:

我在寻找如何部署 Lagom 应用程序时提出了这个问题。部署 Lagom 应用的答案在这里:***.com/questions/27858758/… 【参考方案1】:

问题是在我的项目中我有多个主要类。在build.sbt 我有:

Keys.mainClass in (Compile, run) := Some("Rest")

应该是

Keys.mainClass in (Compile) := Some("Rest")

现在它可以完美运行了。

【讨论】:

这很好,谢谢。我将具有主类的jdom library 添加到我的项目中,并得到了这个神秘的破坏。来自sbt-native-packager 的警告将是一个不错的选择。 我必须为mainClass 键添加Compile 范围才能在packageArchetype.java_server 项目中生成bin 脚本 我也有这个问题;定义 mainClass in (Compile, run) := Some("foo") 而不是 mainClass in (Compile) := Some("foo")。这是标准预期的 SBT 行为,还是看起来像 sbt-native-packager 中的错误? 这是一个有趣的问题,我解决了这个问题后没有进一步调查 - 你在使用最新版本的 sbt-native-packager 时遇到过同样的问题吗? 也适用于 docker 打包【参考方案2】:

附带说明,更改 mainClass 的配置会影响应用程序的 in-sbt 运行。为了将您的构建配置为在 sbt 中运行应用程序(例如在开发期间)以及创建包,您将需要 2 个 mainClass 定义(在 build.sbt 中):

mainClass in Compile := Some("MyBootKernel")

mainClass in (Compile, run) := Some("MyApp")

其中 2 个主要类是:

class MyBootKernel extends Bootable 
  def startup =  MyApp.main(Array()) 
  def shutdown = 

object MyApp extends App 
    // initialize application.

bin目录中的启动脚本将app主类传递给akka微内核,它必须扩展Bootable(然后初始化应用程序),而直接从sbt运行不需要启动东西(即直接应用程序)。

【讨论】:

以上是关于为啥 sbt-native-packager 不生成 bin 目录?的主要内容,如果未能解决你的问题,请参考以下文章

我的世界海龟为啥不生蛋反而在那一动不动?

治愈系书单|林曦《只生欢喜不生愁》

生还是不生? SpringBoot3 版本有起飞前兆,最小依赖Java17!

sbt-native-packager,挂钩到 debian 包的生命周期

不硬啃,不生背《最常用Python操作总结》零基础快速入门

elementui里switch设置disabled切换不生