0

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

-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)

当我遇到这种情况时遇到此错误:

4

2 回答 2

0

目前还不完全清楚你在问什么,但最好的建议就是不要那样做。在编译/构建时仅使用一个版本的 JAR,在运行时(仅)使用相同的版本。

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


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

于 2012-07-18T03:34:06.647 回答
0

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

于 2012-07-18T03:39:10.590 回答