問題のシナリオ
IDEA は
mvn clean package -DskipTest=true
コマンドを実行するか、ツールを使用してMaven菜单
パッケージ化操作を実行します。java -jar app.jar
コマンドの実行後、jar にメインのマニフェスト属性が存在しないことを示すメッセージが表示されます。
D:\WorkSpace\demo\target>java -jar demo-SNAPSHOT.jar
demo-SNAPSHOT.jar中没有主清单属性
原因分析
このエラーは通常、生成された JAR ファイルにメインのマニフェスト属性が欠落していることが原因で発生します。コマンドを使用して JAR ファイルを実行する場合、JVM は
java -jar
JAR ファイル内のプロパティを含むMain-Class
マニフェスト ファイルを探す必要があります。このプロパティが見つからない場合、このエラーが発生します。
確認分析
Jar パッケージを開いて、それが構築された jar ディレクトリを表示すると、MANIFEST.MF ファイルがあることがわかります。このファイルは、jar の実行時に検索されるマニフェスト ディレクトリです。メイン マニフェスト データは、実行されるメイン クラス、つまりメイン関数エントリが配置されるクラスです。
通常、マニフェスト ファイルには次のものが含まれます。
Main-Class:cn.ybzy.demo.mainDemo
解決
AddMainクラス
Main-Class
マニフェスト プロパティを含むファイルを手動で作成しMANIFEST.MF
、JAR ファイルに追加します。
Jar パッケージを開き、MANIFEST.MF
Main-Class をファイルに追加します。
Main-Class:cn.ybzy.demo.mainDemo
プラグインを使用する
1.maven-jar-plugin
プラグインを使用する
プラグインはpom.xml ファイルで使用され
maven-jar-plugin
、<mainClass>
プロパティはその中で指定されます。
<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.maven-shade-plugin
プラグインを使用する
<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>