java - 无法通过包含 Mail 依赖项 jar 文件来运行 java 应用程序(作为 exec JAR)

标签 java jakarta-mail executable-jar

我正在将 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/

相关文章:

java - 使用 HttpServletRequestWrapper 请求中的自定义 header 不会出现在客户端

java - 远程 JMX 调用失败,出现 ClassNotFoundException : . ..(无安全管理器:禁用 RMI 类加载器

java - 初始化所有 junit 测试用例都可以使用的对象的最佳方法

java - 将字符串转换为 javax 邮件消息对象

java - SpringBoot 从 2.4.X 升级到 2.6.X 后无法运行我的 jar

java - 刚启动后的 Android 应用程序

performance - 使用 Java Mail 保存附件时如何加快时间?

Spring+JavaMail 发送超时

java - JPMS/Jigsaw 在模块中缺少主类

java - 为控制台制作一个jar文件