为啥 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!