2016-05-30 3 views
0

Ich versuche eine .bat Datei zu erstellen, um meine generierte ausführbare JAR-Datei auszuführen. Ich fand this Methode zum Erstellen von .bat Dateien zum Ausführen eines Projekts. Also, lese ich auf das Plugin here und fügte folgendes zu meinem pom.xml hinzu.Wie erstellt man .bat-Dateien mit Maven Appassembler, der ein JAR ausführt?

Und ja, wie der Name schon sagt, enthält diese JAR JUnit Testfälle.

Ich verhinderte, dass das Plugin JARs entpackte und den Ordner repo erstellte und diesen auf meinen bereits generierten Ordner lib setzte, der alle JARs (ausführbare Dateien und die Abhängigkeiten) enthält. Die .bat Datei wird generiert, aber beim Ausführen bekomme ich den folgenden Fehler.

Error: Could not find or load main class com.companyname.tests.TestRunner 

Auch ich möchte die Eingabeaufforderung nach der Ausführung bleiben. In diesem Fall schließt es sofort. Vielleicht weil ich einen Fehler bekomme. Ich bin mir nicht sicher.

So, wieder in die Suche und gefunden this. Aber wie die akzeptierte Antwort schon sagt, meine pom.xml bereits enthält -

<packaging>jar</packaging> 

Das montierte Verzeichnis ist -

AutoConfigTest 
| 
|--bin 
| `- contains the .bat file 
|--conf 
| `- contains the property files and other configuration files 
|--lib 
    `- contains all the JARs 

Was mache ich falsch hier?

+0

Ja, das [Frage, die Sie erwähnen] (http://stackoverflow.com/q/15228501/6042824) sieht genau wie deins aus. Die akzeptierte Lösung ist seltsam, da "jar" Standardverpackung ist. Hast du die anderen Lösungen und Vorschläge versucht? Es scheint, dass es mehrere Dinge gibt, die schiefgehen können und die anderen antworten auf eines dieser Dinge. –

+0

Was ist der Inhalt der generierten '.bat' Datei? Enthält eine '.jar' Datei in' lib/'Ihre Klasse' com.companyname.tests.TestRunner'? – SubOptimal

+0

@SubOptimal Ja, das Jar, das 'com.Companyname.tests.TestRunner' im Ordner' lib' enthält. Ich habe es überprüft. –

Antwort

0

Ich habe das Problem gefunden. @SubOptimal hat richtig darauf hingewiesen, dass die Hauptklasse für die Batch-Datei nicht sichtbar ist.

Aus irgendeinem Grund wird die Test-JAR-Datei (die die Hauptklasse enthält) nicht zur Klassenpfadvariablen der Stapeldatei hinzugefügt. Als Ergebnis habe ich immer den in der Frage erwähnten Fehler erhalten, wenn ich die Batch-Datei ausgeführt habe.

Ich ging zurück auf die Dokumentation und gefunden this.

Manchmal kommt es vor, dass Sie viele Abhängigkeiten haben, was bedeutet, dass Sie einen sehr langen Klassenpfad haben und zu lang werden (insbesondere auf Windows-basierten Plattformen). Diese Option kann in einer solchen Situation helfen. Wenn Sie diese Option aktivieren, enthält Ihr Klassenpfad nur einen Klassenpfad-Platzhalter (REPO/*). Beachten Sie jedoch, dass dies nur in Kombination mit Java 1.6 und höher und mit repositoryLayoutflat funktioniert. So

, anstelle von einzelnen JAR-Dateien in den Weg geben, habe ich das ganze lib Verzeichnis in den Classpath, indem Sie das folgende an die pom.xml.

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>appassembler-maven-plugin</artifactId> 
    <version>1.10</version> 
    ... 
    <configuration> 
     ... 
     <repositoryLayout>flat</repositoryLayout> 
     <useWildcardClassPath>true</useWildcardClassPath> 
     ... 
    </configuration> 
    ... 
</plugin> 

Ich konnte dies tun, weil das Repository Layout lib bereits flach war. Es gab keine Hierarchien. Keine andere Änderung wurde benötigt. Die Batch-Datei verhält sich jetzt wie erwartet.

1

Vielleicht ist es im Zusammenhang mit (von den README.md)

Alle Abhängigkeiten und das Artefakt des Projektes selbst in einem dynamisch erzeugten Maven Repository in einem definierten Verzeichnis platziert werden zusammenzustellen. Alle Artefakte (Abhängigkeiten + das Artefakt aus dem Projekt) werden dem Klassenpfad in den generierten Bin-Skripten hinzugefügt.

In Ihrer pom.xml verhindern Sie die Erstellung dieses Repository. Sie müssen also sicherstellen, dass das Artefakt aus dem Projekt am erwarteten Ort kopiert wird.

Unter der Annahme folgende Projekteinstellungen

<groupId>com.companyname</groupId> 
<artifactId>Maven-AppAssembler</artifactId> 
<version>0.0.1-SNAPSHOT</version> 

das Artefakt wird erwartet

"$REPO"/com/companyname/Maven-AppAssembler/0.0.1-SNAPSHOT/Maven-AppAssembler-0.0.1-SNAPSHOT.jar 

wo $REPO Entschlossenheit target/appassembler/lib bei (bin/AutoConfigTest CLASSPATH Einstellung in den Skripten) zu sein.

+0

Ich glaube, ich habe den Fehler gefunden. Sie weisen darauf hin, dass die Hauptklasse für die Stapeldatei nicht sichtbar ist. Aus irgendeinem Grund wird die Test-JAR-Datei (die die Hauptklasse enthält) nicht zur Klassenpfadvariablen der Stapeldatei hinzugefügt. –

Verwandte Themen