IntelliJ IDEA が Maven パッケージ化を実行し、java -jar コマンドを実行して、jar にメインのマニフェスト属性がないことを示すプロンプトを表示するときの問題を解決します。

問題のシナリオ

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 -jarJAR ファイル内のプロパティを含むMain-Classマニフェスト ファイルを探す必要があります。このプロパティが見つからない場合、このエラーが発生します。

確認分析

Jar パッケージを開いて、それが構築された jar ディレクトリを表示すると、MANIFEST.MF ファイルがあることがわかります。このファイルは、jar の実行時に検索されるマニフェスト ディレクトリです。メイン マニフェスト データは、実行されるメイン クラス、つまりメイン関数エントリが配置されるクラスです。

ここに画像の説明を挿入します
通常、マニフェスト ファイルには次のものが含まれます。

Main-Class:cn.ybzy.demo.mainDemo

解決

AddMainクラス

Main-Classマニフェスト プロパティを含むファイルを手動で作成しMANIFEST.MF、JAR ファイルに追加します。

Jar パッケージを開き、MANIFEST.MFMain-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>

おすすめ

転載: blog.csdn.net/qq_38628046/article/details/131117598