Reputation: 16422
I have an SBT project that contains multiple classes with main
, i.e. MyClass extends App
. One-jar works fine when there is only one such class. If it finds multiple classes it prompts me to choose which one I want to package:
> one-jar
Multiple main classes detected, select one to run:
[1] com.smth.AppOne
[2] com.smth.AppTwo
Enter number:
I'd like to configure one-jar to automatically package all main classes. In documentation it defines default main class as mainClass in run in Compile
, so it looks like it expects only one value.
If this is not possible I'm curious why not. :)
For now I can only think of some hacks like creating a surrogate project for each jar or setting a mainClass
in SBT each time before calling one-jar
(multiple times per build). These approaches obviously have their deficiencies.
Upvotes: 3
Views: 5165
Reputation: 599
I would try sbt multi-project builds. You should be able to set a main class per project.
Upvotes: 0
Reputation: 10711
Use the following to set up the default main class:
mainClass in (Compile, run) := Some("com.smth.AppOne")
Source: This stackoverflow Q&A
Upvotes: 3
Reputation: 21567
It's not about SBT or onejar plugin. When you pack your project into the jar file, both main classes would be packed. JAR File specification defines that you can have as many classes with main()
method as you want, but there should be only one class with main()
method defined in Main-Class
attribute per JAR
Upvotes: 2
Reputation: 1722
From documentation:
mainClass in oneJar := Some("com.acme.Woozler")
Try to add
mainClass in oneJar := Some("com.smth.AppOne")
in you configuration
Upvotes: 0