2015-01-09 24 views
7

Ich benutze Assembly Plugin in sbt um mein Projekt zu assemblieren. Aber Fehler passieren, wenn sie von "java -jar xx.jar" ausgeführt werden -scala sbt assembly "Kein Hauptmanifest Attribut"

"kein Haupt-Manifest-Attribut".

Ich denke, es ist, weil es zwei Dateien in meinem Verzeichnis src/main/scala/ gibt und jedes mit einem Objekt erweitert Application, was bedeutet, dass es zwei Haupteintrag im Projekt gibt. Aber ich brauche zwei Anwendungen, eine ist der Server und die andere ist der Test-Client.

So behandeln Sie dieses two-main-entry Problem in scala sbt. Danke im Voraus.

Antwort

18

Definieren Sie in Ihrer SBT-Build-Datei die Hauptklasse.

Wenn Sie build.sbt verwenden, das wäre dann:

mainClass in assembly := Some("com.domain.Main") 

Wenn Sie Build.scala verwenden, dann könnten Sie so etwas tun:

lazy val app = (project in file("app")). 
    settings(assemblySettings: _*) 
    settings(mainClass in assembly := Some("com.domain.Main")) 
+0

es funktioniert! Vielen Dank – hl1020

+0

@ polkovnikov.ph Sind Sie sicher, dass Sie das Plugin sbt-assembly geladen haben? –

0

hatte ich dieses Problem während Lagom testen.

Um in Lagom implementieren Sie nur das -impl Projekt zugreifen und diese ausführen:

./sbt "project <your-project>-impl" dist 

Dies wird einen Reißverschluss mit der ausführbaren Datei im Innern erzeugen.