当前位置: 首页 > 面试题库 >

Java:同一项目中的两个jar。

司徒炎彬
2023-03-14
问题内容

我有一个Java项目正在使用两个导入的具有相同类(com.sun.mail.imap.IMAPFolder)的jar
。导入类时,有没有一种方法可以明确说明要使用哪个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中构建项目。


问题答案:

您不能仅在Java源代码中执行所要求的操作。Java不是为此而设计的。

这是一种糟糕的情况,只有使用自定义类加载器才能可靠地处理它们,每个加载器都提供您需要的一个jars。由于您最初是在问这个问题,所以这可能不是您应该采取的方式,因为这样会带来很多新的耗时的问题。

我强烈建议您找出 为什么 您的类路径中有同一个jar的两个不同版本,然后重新编写程序,以便只需要一个版本。



 类似资料:
  • 1.背景 项目里已经引入了bcprov-jdk15on-1.54.jar,并且在很多地方使用. 现在合作方给过来一套新的接入资料,里面有以下jar包. 2.问题 项目中的bcprov-jdk15on存在两个版本,旧的是1.54,新的是1.69. 类似于下面这张图: 由于很多地方用到了1.54版本,所以不能直接升级到1.69. 现在想实现以下两点: 对于本次的新版本,其中的fintech-java-

  • 我正在做一个NFC应用程序,想知道这种情况是否可能: 比如说,我在一个项目中有两个NFC标签和两个活动。NFC A是通过在NFC A中编写MIME类型来打开活动A的 在项目的清单文件中,活动A有以下意图过滤器: 所以,这很好用。我将添加另一个NFC标签和另一个活动。NFC B是为了开放活动B而编写的 现在,我应该如何将MIME类型写入NFC B并为活动B设置意图过滤器?考虑到活动A和活动B都在一个

  • 问题内容: 我知道对于经验丰富的编码人员来说,这可能是一个愚蠢的问题。但是我有一个库(http客户端),我的项目中使用的其他一些框架/jar也需要。但它们都需要不同的主要版本,例如: 类加载器是否足够智能以某种方式将它们分开?很有可能不是吗?万一所有三个jar中的Class都相同,Classloader如何处理这个问题。加载哪一个?为什么? Classloader是仅拾取一个jar还是将其任意混合

  • 问题内容: | uId | title | amount | makers | widgets | 1 richard 998 xcorp sprocket 2 swiss 995 ycorp framitz 3 ricky 90 zcorp flobber 4 ricky2 798 xcorp framitz 1 lilrick 390 xcorp sprocket 1 brie 200 mco

  • 问题内容: 我有一个项目,其中有两个使用sqlline的单独模块和另一个依赖jline的库(例如OtherLib)。但是在不同版本上。 Module1使用Sqlline取决于 jline 2.10 Module2使用OtherLib取决于 jline 0.9.94 并且这两个版本不兼容。因此,我设置了类路径,以便Module1首先在 $ HOME / lib / module1 文件夹中搜索,而M

  • 当尝试在IntelliJ中向我的java项目添加模块时(通过转到project structure,modules,+sign,jars或directories),我得到错误“不能保存设置:内容根”...“是为模块定义的”..“&”..“(这两个模块都不是我要添加的模块)。项目中的两个模块不能共享相同的内容根。有没有其他方法可以将模块添加到项目中?或者有什么方法可以消除这个错误? 源根之外的jav