[エラー レコード] IntelliJ IDEA は依存ライブラリを含む Jar パッケージをパッケージ化し、エラーを報告します (マニフェストのメイン属性の署名ファイル ダイジェストが無効です)

記事ディレクトリ


ブログの概要:主要なエラー メッセージは次のとおりです。

エラー: JNI エラーが発生しました。インストールを確認して再試行してください。
スレッド「メイン」の例外 java.lang.SecurityException: マニフェストのメイン属性の署名ファイル ダイジェストが無効です。

jar パッケージ内の署名ファイルが無効です。META-INF ディレクトリ内の署名ファイルを削除してください。
圧縮パッケージを開いて、これら 2 つの署名ファイルを削除してください。

ここに画像の説明を挿入





1. エラーメッセージ



依存ライブラリを処理する場合、依存ライブラリを Jar パッケージにパッケージ化することを選択します。構成は次のようになります。

ここに画像の説明を挿入

2 番目の方法を使用する場合、パッケージ化時にコアのメイン プログラム コードのみがパッケージ化され、依存ライブラリは同じレベルのディレクトリにコピーされます。

その場合、プログラムを別のディレクトリにコピーするときに、依存ライブラリを個別にコピーする必要があり、面倒です。

これは、2 番目の方法である出力 jar パッケージを使用して、多数の jar パッケージを個別に管理することです。

ここに画像の説明を挿入


必要な依存ライブラリはすべて左側の「抽出された 'xxx'」に含まれているため、依存ライブラリを jar パッケージにパッケージ化できます。

ここに画像の説明を挿入

パッケージ化後の効果は、次のような、パッケージ名ファイルの束です。

ここに画像の説明を挿入

上記の jar プログラムを実行すると、エラーが報告されます。

ここに画像の説明を挿入

ここに画像の説明を挿入


完全なエラーメッセージ:

D:\>java -jar App.main2.jar
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
        at sun.security.util.SignatureFileVerifier.processImpl(Unknown Source)
        at sun.security.util.SignatureFileVerifier.process(Unknown Source)
        at java.util.jar.JarVerifier.processEntry(Unknown Source)
        at java.util.jar.JarVerifier.update(Unknown Source)
        at java.util.jar.JarFile.initializeVerifier(Unknown Source)
        at java.util.jar.JarFile.getInputStream(Unknown Source)
        at sun.misc.URLClassPath$JarLoader$2.getInputStream(Unknown Source)
        at sun.misc.Resource.cachedInputStream(Unknown Source)
        at sun.misc.Resource.getByteBuffer(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$100(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)




2、解決策



主要なエラー メッセージ:

エラー: JNI エラーが発生しました。インストールを確認して再試行してください。
スレッド「メイン」の例外 java.lang.SecurityException: マニフェストのメイン属性の署名ファイル ダイジェストが無効です。

エラー: JNI エラーが発生しました。インストールを確認して再試行してください。
java.lang.SecurityException: マニフェストのメイン属性の署名ファイル ダイジェストが無効です

エラー メッセージは明らかで、jar パッケージ内の META-INF 情報署名ファイルが無効であることを意味します。


署名ファイルが無効な場合は、署名ファイルを使用せずに 2 つの署名ファイルを直接削除します。

圧縮ツールを使用して開きます。ここでは、7-zip 圧縮ツールを使用して jar パッケージを開き、2 つの署名ファイル MANIFEST.MF と MSFTSIG.RSA を削除します。

ここに画像の説明を挿入
その後、プログラムを再度実行すると、プログラムは正常に実行できるようになります。

おすすめ

転載: blog.csdn.net/han1202012/article/details/132608382
おすすめ