3

我有一个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: 

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

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

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

4

4 回答 4

2

使用以下设置默认主类:

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

资料来源:这个stackoverflow问答

于 2014-02-26T08:42:01.940 回答
2

这与 SBT 或 onejar 插件无关。当您将项目打包到 jar 文件中时,两个主要类都将被打包。JAR 文件规范定义您可以拥有任意数量的具有方法的类,但每个 JAR 的属性main()中应该只有一个具有main()方法定义的类Main-Class

于 2013-12-17T06:09:35.930 回答
0

从文档:

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

尝试添加

mainClass in oneJar := Some("com.smth.AppOne")

在你的配置中

于 2013-12-17T03:22:58.750 回答
0

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

于 2015-11-24T19:55:38.600 回答