我的应用程序有两个具有一些功能但版本号不同的罐子。
-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没有。
我的疑问是,如果我在调用方法时报告错误?
无法找到符号 symbol:方法deleteQuietly(java.io.File)
我遇到这种情况时遇到了这个错误:
答案 0 :(得分:0)
你所要求的并不完全清楚,但最好的建议就是不要那么做。在编译/构建时只使用一个版本的JAR,在运行时使用相同的版本(仅限)。
如果您有两个版本的JAR,其API不是100%兼容(在两个方向上),那么行为将取决于哪个JAR文件首先出现在类路径上。如果没有方法的版本首先出现,您将获得构建错误(如错误消息中的错误)或运行时错误。
我有点不解你认为它可能有用。也许您认为Java将加载该类的两个版本并使用某种魔法来从不同版本中选择方法。它不像那样工作。 Java将加载它遇到的类的第一个版本:任何其他版本将被默默忽略。
答案 1 :(得分:0)
这是类加载器问题。从类路径中删除commons-io-1.3.2.jar并重新部署。如果您不想删除此jar,请使用maven来避免类加载问题。