2012-07-18 58 views
0

我的应用程序具有两个具有一些功能但不同版本号的罐子。两个具有一些功能但具有不同版本号的罐子

-rwxr-xr-x 1 nobody nobody 87776 Jul 16 23:40 commons-io-1.3.2.jar 
-rwxr-xr-x 1 nobody nobody 109043 Jul 16 23:35 commons-io-1.4.jar 

一个jar 1.4.jar的方法deleteQuietly(),但版本较低1.3.1 jar没有。

我的谜题是如果在调用方法时报告错误?

找不到符号 符号:方法deleteQuietly(java.io.File中)

我遇到这个错误,当我有这种情况:

回答

0

这是不完全清楚你的要求,但最好建议只是不这样做。在编译/编译时仅使用一个版本的JAR,而在运行时只使用相同的版本(仅)。

如果您有两个版本的JAR与API不是100%兼容(在两个方向上),那么行为将取决于哪个JAR文件在类路径中最先到达。如果没有方法的版本首先出现,您将得到构建错误(如错误消息中的错误)或运行时错误。


我有点困惑,你认为它可能有效。也许你认为Java会加载这两个版本的类,并使用某种魔法从不同版本中选择方法。它不这样工作。 Java将加载遇到的类的第一个版本:任何其他版本都将被默认忽略。

0

这是类加载器问题。从你的类路径中移除commons-io-1.3.2.jar并重新部署。如果你不想删除这个jar,使用maven来避免类加载问题。

+0

maven如何解决类加载问题? – BeeOnRope 2012-07-18 05:07:14

+0

Maven使用一个声明依赖关系标签的jar。它解决jar重复,就像嘉福的问题一样。 – 2012-07-18 05:21:18

相关问题