我有一个 java 项目,它使用两个具有相同类的导入 jar ( com.sun.mail.imap.IMAPFolder
)。有没有办法在导入类时明确说明要使用哪个 jar?使用:
import com.sun.mail.imap.IMAPFolder;
似乎按照构建路径顺序使用该类,但由于某种原因似乎并非如此
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: java.lang.NoSuchMethodError: com.sun.mail.imap.IMAPFolder.idle()V
at com.woodbury.GCM.HelperGmailMonitor.doEmail(HelperGmailMonitor.java:104)
at com.woodbury.GCM.Launch.listen(Launch.java:16)
at com.woodbury.GCM.Launch.main(Launch.java:10)
... 5 more
在运行时。我正在 eclipse 中构建项目。
原文由 Fenrir 发布,翻译遵循 CC BY-SA 4.0 许可协议
您不能只在 Java 源代码中做您要求的事情。 Java 不是为此而设计的。
这是一个糟糕的情况,只能使用自定义类加载器可靠地处理,每个类加载器都提供您需要的一个 jar。由于您首先要问这个问题,因此这可能不是您应该采用的方式,因为这会带来很多新的耗时问题。
我强烈建议您找出 为什么 您的类路径中有同一个 jar 的两个不同版本,然后重新编写您的程序,以便您只需要一个版本。