【问题标题】:NoClassDefFoundError: javax/activation/DataSourceNoClassDefFoundError: javax/activation/DataSource
【发布时间】:2012-01-01 10:50:22
【问题描述】:

这是代码:

      Session session = Session.getDefaultInstance(props, null);
      Store store = session.getStore("imaps");
      store.connect("imap.gmail.com", "****@gmail.com", "****");
      System.out.println(store);
      Folder folder = store.getDefaultFolder();
      folder = folder.getFolder("INBOX");
      folder.open(Folder.READ_ONLY);

      System.out.println("Message Count: "+folder.getMessageCount());
      System.out.println("Unread Message Count: "+folder.getUnreadMessageCount());


           Message[] messages = folder.getMessages();  --> here the code stops.

      FetchProfile fp = new FetchProfile();
      fp.add(FetchProfile.Item.ENVELOPE);
      folder.fetch(messages, fp);

      for (int i = 0; i< messages.length; i++) 
      { 
          System.out.println("From:"+ messages[i].getFrom()); 
          }

代码给出以下异常并停在所示点。

线程“main”中的异常 java.lang.NoClassDefFoundError: javax/activation/DataSource 在 com.google.code.com.sun.mail.imap.MessageCache.getMessage(MessageCache.java:129) 在 com.google.code.com.sun.mail.imap.IMAPFolder.getMessage(IMAPFolder.java:1394) 在 openReports.OpenReports.main

【问题讨论】:

  • getMessageCount 打印正确,因此它可以连接。

标签: java jakarta-mail


【解决方案1】:

在 jdk 1.8 上,我通过重新安装 jdk 并检查 JAVA_HOME 和 JRE_HOME 中的路径解决了这个问题

【讨论】:

    【解决方案2】:

    我通过切换到 Java 8(默认为 Java9)解决了混合 Java/Scala 项目中的类似 NoClassDefFoundError: javax/activation/DataSource 问题。

    讨论:https://github.com/highsource/jsonix-schema-compiler/issues/81

    【讨论】:

      【解决方案3】:

      如果你使用 maven,你可以手动添加

      <dependency>
          <groupId>javax.activation</groupId>
          <artifactId>activation</artifactId>
          <version>1.1.1</version>
      </dependency>
      

      【讨论】:

      • 我的项目使用了ant。只需将&lt;classpathentry kind="lib" path="lib/activation.jar"/&gt; 添加到.classpath 文件即可。
      • gradle 相同 -> implementation 'javax.activation:activation:1.1.1'
      • 为了完整起见,这里是 sonatype 上的工件,其中包含所有构建系统的代码:search.maven.org/artifact/javax.activation/activation/1.1.1/jar
      【解决方案4】:

      我在buildpath中添加了activation.jar,问题就解决了。

      所以我使用了 2 个 jars java-mail-ima.** .jar、activation.jar(供进一步参考)。

      【讨论】:

      • 请注意,javax.activation 包含在 JDK 6 中,因此如果您使用较新的 JDK,则不需要激活 jar。
      • 是的 .. 这有帮助。它减少了罐子的数量。非常感谢。
      • @Martin 如果我们不使用更高 JDK 版本的激活 jar。仍然显示找不到类。
      • 请注意,这从 Java 9 开始再次被删除。升级到 JDK 9 或更高版本后,您将再次遇到相同的错误。
      • 这在 R 语言中使用 rJava 库向我显示。我想知道如何将这个解决方案移植到那里......
      猜你喜欢
      • 2018-04-05
      • 2021-12-24
      • 2019-06-17
      • 1970-01-01
      • 2019-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-09
      相关资源
      最近更新 更多