我正在将 java 应用程序构建为可执行 jar。为了编译和构建应用程序,我使用 ANT 构建。
应用程序运行正常,但我没有包含“邮件”依赖项 jar 文件。
根据要求,我使用 Java Mail API 发送电子邮件通知。
为此,我添加了以下邮件依赖项 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$
请专家帮我解决这个错误。
最佳答案
我假设您将所有类文件打包到一个“uberjar”中?
问题是激活库是一个签名的jar;它在其 list 中包含类文件的数字签名。当你打包 uberjar 时,你丢失了那些。
处理这个问题的正确方法是不要把所有东西都装进一个 jar 里。将每个库保留在自己的包装中,然后将它们一起分发。
但是,如果您想继续使用 uberjar,您应该能够通过将签名从激活 jar 的 list 复制到 uberjar 的 list 中来解决此问题。恐怕我不知道 Ant 是否支持这一点。
关于java - 无法通过包含 Mail 依赖项 jar 文件来运行 java 应用程序(作为 exec JAR),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13082828/