【发布时间】:2016-02-16 02:21:24
【问题描述】:
我之前在项目 A 中使用过 commons-io 中的 version 1.3.2。在项目 B 中,我使用了最新的 version 2.4。现在我想将项目 B 的 JAR 作为库添加到项目 A。由于项目 B 使用 commons-io 1.3.2 版中尚不存在的功能,我更新了项目 A 的 pom.xml 以将 2.4 版用于 commons -io:
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
现在,当我尝试在项目 A 中运行调用项目 B 中的库的代码时,我得到了
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.commons.io.FileUtils.deleteQuietly(Ljava/io/File;)Z
因为IntelliJ 似乎没有意识到库已经更新。
我尝试了re-importing the Maven dependencies 并删除了包含commons-io 库C:\Users\Name\.m2\repository\commons-io 的本地目录,但这也不起作用。如何解决此问题并让 IntelliJ 了解更新的类,例如 FileUtils?例如,他们的反编译器在我查看定义时仍然向我显示旧的字节码版本,但它应该根据pom.xml 更新它。
【问题讨论】:
-
你能在 IntelliJ 中检查你的 maven 配置以检查你是否有正确的本地 repo 吗?之后,再次删除commons-io目录,确认没有了,然后回到idea,再次点击maven窗口的reimport按钮。然后,检查 commons-io 目录是否已重新创建并查看它包含的内容。如果它比您预期的要多,请在命令行上尝试
mvn dependency:tree,并检查 commons-io 依赖项,看看您是否了解每个版本的来源。然后,在此处报告您的结果。 -
@EngineerDollery:我解决了这个问题。从项目 B 导出的 JAR 实际上包含一个旧版本的
commons-io,因为它是捆绑的,所以它的优先级高于项目 A 中的那个。
标签: java maven intellij-idea