Problemszenario
IDEA führt
mvn clean package -DskipTest=true
den Befehl aus oder verwendet Tools, umMaven菜单
Verpackungsvorgänge durchzuführen.java -jar app.jar
Nach der Ausführung des Befehls wird dann angezeigt, dass im JAR kein Hauptmanifestattribut vorhanden ist.
D:\WorkSpace\demo\target>java -jar demo-SNAPSHOT.jar
demo-SNAPSHOT.jar中没有主清单属性
Ursachenanalyse
Dieser Fehler wird normalerweise dadurch verursacht, dass in der generierten JAR-Datei ein Hauptmanifestattribut fehlt. Wenn Sie eine JAR-Datei mit einem Befehl ausführen , muss die JVM nach einer Manifestdatei suchen
java -jar
, die Eigenschaften in der JAR-Datei enthält .Main-Class
Wenn diese Eigenschaft nicht gefunden wird, tritt dieser Fehler auf.
Bestätigungsanalyse
Öffnen Sie das Jar-Paket und sehen Sie sich das Jar-Verzeichnis an, in dem es erstellt wurde. Sie können sehen, dass es eine MANIFEST.MF-Datei gibt. Diese Datei ist das Manifestverzeichnis, nach dem gesucht werden soll, wenn das JAR ausgeführt wird. Die Hauptmanifestdaten sind die auszuführende Hauptklasse, dh die Klasse, in der sich der Hauptfunktionseintrag befindet.
Normalerweise gibt es eine in der Manifestdatei:
Main-Class:cn.ybzy.demo.mainDemo
Lösung
AddMain-Klasse
Erstellen Sie manuell eine Datei mit
Main-Class
ManifesteigenschaftenMANIFEST.MF
und fügen Sie sie der JAR-Datei hinzu
Öffnen Sie das Jar-Paket und MANIFEST.MF
fügen Sie Main-Class zur Datei hinzu.
Main-Class:cn.ybzy.demo.mainDemo
Verwenden Sie Plugins
1. Verwenden Sie maven-jar-plugin
Plugins
Das Plugin wird in der Datei pom.xml verwendet
maven-jar-plugin
und<mainClass>
die Eigenschaften werden darin angegeben.
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.example.MainClass</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
2. Verwenden Sie maven-shade-plugin
Plugins
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.example.MainClass</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>