[解決済み] jarファイルを実行しようとすると、マニフェストの主属性に対する無効な署名ファイルのダイジェストで例外が発生する
質問
私のプロジェクトのjarファイルを実行しようとしています。私はintelliJで作業しており、jarファイルを生成するためにアーティファクトを使用しています。しかし、私のjarファイルを実行しようとすると、毎回例外が発生します。
java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
at sun.security.util.SignatureFileVerifier.processImpl(SignatureFileVerifier.java:284)
at sun.security.util.SignatureFileVerifier.process(SignatureFileVerifier.java:238)
at java.util.jar.JarVerifier.processEntry(JarVerifier.java:316)
at java.util.jar.JarVerifier.update(JarVerifier.java:228)
at java.util.jar.JarFile.initializeVerifier(JarFile.java:383)
at java.util.jar.JarFile.getInputStream(JarFile.java:450)
at sun.misc.JarIndex.getJarIndex(JarIndex.java:137)
at sun.misc.URLClassPath$JarLoader$1.run(URLClassPath.java:839)
at sun.misc.URLClassPath$JarLoader$1.run(URLClassPath.java:831)
at java.security.AccessController.doPrivileged(Native Method)
at sun.misc.URLClassPath$JarLoader.ensureOpen(URLClassPath.java:830)
at sun.misc.URLClassPath$JarLoader.<init>(URLClassPath.java:803)
at sun.misc.URLClassPath$3.run(URLClassPath.java:530)
at sun.misc.URLClassPath$3.run(URLClassPath.java:520)
at java.security.AccessController.doPrivileged(Native Method)
at sun.misc.URLClassPath.getLoader(URLClassPath.java:519)
at sun.misc.URLClassPath.getLoader(URLClassPath.java:492)
at sun.misc.URLClassPath.getNextLoader(URLClassPath.java:457)
at sun.misc.URLClassPath.getResource(URLClassPath.java:211)
at java.net.URLClassLoader$1.run(URLClassLoader.java:365)
at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:495)
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main"
そして、これが私のマニフェスト・ファイルです。
Manifest-Version: 1.0
Main-Class: Main
そして、プロジェクトに追加された外部ライブラリ
私は何を間違えているのでしょうか?
アップデート
解決方法は?
依存関係にあるJARのいくつかは署名付きJARです。そのため、すべてを1つのJARに結合してそのJARを実行すると、署名付きJARの署名が一致しないため、署名の不一致に関するセキュリティ例外が発生します。
これを解決するには、まず、依存関係にあるすべてのJARが署名付きJARであることを確認し、それらを除外する必要があります。MAVENとANTのどちらを使用しているかによって、適切な解決策を取らなければなりません。以下はその例ですが、もっと読むことができます。 こちら , こちら そして こちら .
メイヴン
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>unpack-dependencies</id>
<phase>package</phase>
<goals>
<goal>unpack-dependencies</goal>
</goals>
<configuration>
<excludeScope>system</excludeScope>
<excludes>META-INF/*.SF,META-INF/*.DSA,META-INF/*.RSA</excludes>
<excludeGroupIds>junit,org.mockito,org.hamcrest</excludeGroupIds>
<outputDirectory>${project.build.directory}/classes</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
ANT:
<jar destfile="app.jar" basedir="${classes.dir}">
<zipfileset excludes="META-INF/**/*" src="${lib.dir}/bcprov-jdk16-145.jar"></zipfileset>
<manifest>
<attribute name="Main-Class" value="app.Main"/>
</manifest>
</jar>
OPのコメントを元に更新しました。
sqljdbc4.jar" は、OPの外部ライブラリに含まれる署名付きJARでした。したがって、上記の方法に従って、.SF、.RSA、.DESなどのアルゴリズムファイルのような署名関連ファイルを体系的に除外することが、正しい方法となります。
これらの署名ファイルを除外しないと、署名の不一致が原因でセキュリティ例外が発生します。
JARが署名されているかどうかを知るにはどうしたらいいですか?
JARに.SF、.RSA、.DESなどのアルゴリズムファイルのようなファイルが含まれている場合、それは署名付きJARです。 または、以下を実行します。
jarsigner -verify jarname.jar
と出力されるかどうか確認してください。
関連
-
[解決済み】エラー:配列または java.lang.Iterable のインスタンスに対してのみ反復処理を行うことができます。
-
[解決済み】"実引数リストと形式引数リストの長さが異なる"
-
[解決済み】imageio.IIOException: 入力ファイルが読み込めない
-
[解決済み】javaで指定されたファイルが見つからない
-
[解決済み] java のクラス内のコンストラクタは、指定された型に適用できない
-
[解決済み】Java JDK - doubleからintへの非可逆変換の可能性
-
[解決済み] hibernate のプロパティが見つかりません。
-
[解決済み】Javaの".class expected "について
-
[解決済み】どういう意味か。Serializableクラスがstatic final serialVersionUIDフィールドを宣言していないとは?重複している] [重複している] [重複している] [重複している
-
[解決済み】 executeQuery()でデータ操作文が発行できない。)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】"実引数リストと形式引数リストの長さが異なる"
-
[解決済み】"|="の意味は何ですか?(パイプ等号演算子)
-
[解決済み】ResultSetの例外 - 結果セットの開始前
-
[解決済み】 java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver [重複]。
-
[解決済み】JLabelのテキストを中央に配置するには?
-
[解決済み】Gradleがtools.jarを見つけ出さない
-
[解決済み】Javaで文字列をコピーするにはどうしたらいいですか?
-
[解決済み】ソースルート外のJavaファイル intelliJ
-
[解決済み] JavaでSSLピアが正しくシャットダウンされない
-
[解決済み] .jarを実行しようとすると "無効な署名ファイル "と表示される