0

実行可能なjarとしてJavaアプリケーションを構築しています。アプリケーションをコンパイルしてビルドするには、ANT ビルドを使用しています。

アプリケーションは正常に実行されましたが、「メール」依存関係の jar ファイルが含まれていませんでした。

要件に従って、Java Mail API を使用して電子メール通知を送信しました。

これを行うために、次のメール依存 jar ファイルを追加しました。

  • メール-1.4.jar
  • アクティベーション.jar

これらの依存関係を ANT ビルドに含めてアプリケーションを実行すると、次の例外がスローされます。

Exception in thread "main" java.lang.SecurityException: no manifiest section for signature file entry javax/activation/MimeType.class
    at sun.security.util.SignatureFileVerifier.verifySection(SignatureFileVerifier.java:380)
    at sun.security.util.SignatureFileVerifier.processImpl(SignatureFileVerifier.java:231)
    at sun.security.util.SignatureFileVerifier.process(SignatureFileVerifier.java:176)
    at java.util.jar.JarVerifier.processEntry(JarVerifier.java:245)
    at java.util.jar.JarVerifier.update(JarVerifier.java:199)
    at java.util.jar.JarFile.initializeVerifier(JarFile.java:323)
    at java.util.jar.JarFile.getInputStream(JarFile.java:388)
    at sun.misc.JarIndex.getJarIndex(JarIndex.java:120)
    at sun.misc.URLClassPath$JarLoader$1.run(URLClassPath.java:608)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.misc.URLClassPath$JarLoader.ensureOpen(URLClassPath.java:599)
    at sun.misc.URLClassPath$JarLoader.<init>(URLClassPath.java:583)
    at sun.misc.URLClassPath$3.run(URLClassPath.java:333)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.misc.URLClassPath.getLoader(URLClassPath.java:322)
    at sun.misc.URLClassPath.getLoader(URLClassPath.java:299)
    at sun.misc.URLClassPath.getResource(URLClassPath.java:168)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:194)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
sysvineMM04:MamaBear arun_kumar$ 

専門家 このエラーを解決するのを手伝ってください。

4

1 に答える 1

1

すべてのクラス ファイルを 1 つの「uberjar」にまとめていると思いますか?

問題は、アクティベーション ライブラリが署名済みの jar であることです。マニフェストにクラス ファイルのデジタル署名が含まれています。uberjar を梱包したときに、それらを失いました。

これに対処する正しい方法は、すべてを 1 つの瓶に詰め込まないことです。すべてのライブラリを独自のパッケージのままにして、まとめて配布します。

ただし、uberjar を使い続けたい場合は、アクティベーション jar のマニフェストから uberjar のマニフェストに署名をコピーすることで、これを修正できるはずです。これに対する Ant サポートがあるかどうかはわかりませんが、残念です。

于 2012-10-26T08:01:11.663 に答える