0

我正在构建一个 java 应用程序作为可执行 jar。要编译和构建应用程序,我使用的是 ANT build。

应用程序运行正常,但我没有包含“邮件”依赖 jar 文件。

根据要求,我使用 Java Mail API 发送电子邮件通知。

为此,我添加了以下 Mail 依赖 jar 文件:

  • mail-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

我假设您将所有类文件打包到一个“uberjar”中?

问题是激活库是一个签名的jar;它在其清单中包含类文件的数字签名。当您打包 uberjar 时,您丢失了那些。

处理这个问题的正确方法是不要把所有东西都装进一个罐子里。将每个库保留在自己的包装中,然后将它们一起分发。

但是,如果您想继续使用 uberjar,您应该能够通过将签名从激活 jar 的清单复制到 uberjar 的清单来解决此问题。恐怕我不知道是否有蚂蚁支持。

于 2012-10-26T08:01:11.663 回答