有没有办法使用sbt-onejar在同一个SBT项目中自动打包多个主类?

时间:2013-12-17 02:43:20

标签: scala sbt onejar

我有一个 SBT 项目,其中包含main个多个类,即MyClass extends App。当只有一个这样的类时, One-jar 可以正常工作。如果找到多个类,它会提示我选择要打包的类:

> one-jar

Multiple main classes detected, select one to run:

 [1] com.smth.AppOne
 [2] com.smth.AppTwo

Enter number: 

我想配置one-jar来自动打包所有主类。在documentation中,它将默认主类定义为mainClass in run in Compile,因此它看起来只需要一个值。

如果这是不可能的,我很好奇为什么不呢。 :)

现在我只能想到一些黑客,比如为每个jar创建一个代理项目,或者每次在调用mainClass之前在SBT中设置one-jar(每次构建多次)。这些方法显然有其不足之处。

4 个答案:

答案 0 :(得分:1)

这不是关于SBT或onejar插件。将项目打包到jar文件中时,将打包两个主类。 JAR File specification定义您可以根据需要使用main()方法创建尽可能多的类,但每个JAR的main()属性中只应定义一个Main-Class方法的类

答案 1 :(得分:1)

使用以下命令设置默认主类:

mainClass in (Compile, run) := Some("com.smth.AppOne")

来源:This stackoverflow Q&A

答案 2 :(得分:0)

来自文档:

mainClass in oneJar := Some("com.acme.Woozler")

尝试添加

mainClass in oneJar := Some("com.smth.AppOne")
你配置中的

答案 3 :(得分:0)

我会尝试sbt多项目构建。您应该能够为每个项目设置一个主类。