Eclipse检测到错误的maven依赖

时间:2014-04-04 10:55:05

标签: java eclipse maven

我遇到了模糊的问题。

我是项目的新手。我用Eclipse。我的所有同事都使用IDEA。我有来自svn的结账项目。

我为构建和部署项目执行了相应的maven任务。一切都很好。

但我的Eclipse向我展示了问题。

代码:

sceneService.uploadFile(...);
eclipse显示sceneService没有uploadFile方法

我开始研究。我在同事的PC上展示这个课程。但是这个问题还没有解决。我注意到我们使用sceneService类的不同版本的jar文件。

我们使用相同版本的pom.xml。

我的pom.xml中的jar依赖项(对于我的模块):

        <dependency>
            <groupId>com.day.cq.dam</groupId>
            <artifactId>cq-dam-scene7</artifactId>
            <scope>provided</scope>
        </dependency>

当我输入alt+shift+w时,我看到该jar包含来自另一个模块的sceneService类。

4 个答案:

答案 0 :(得分:3)

我认为Maven下载正确的jar有一些问题。您的本地存储库可能包含jar的早期版本。

通过从命令提示符转到项目的根文件夹来尝试这些命令。

  1. mvn eclipse:clean
  2. mvn eclipse:eclipse
  3. mvn install
  4. 如果问题仍然存在,请尝试删除本地.m2存储库并再次重建项目

答案 1 :(得分:2)

我认为我之前关于“提供”范围的评论是一个红色的鲱鱼。实际问题可能是由于版本冲突造成的。

默认情况下,Eclipse启用workspace resolution of artifacts。这意味着它将从工作区中的其他项目中找到要使用的工件(即cq-dam-scene7)。它也会在.m2存储库中找到它们;我不确定哪个优先。

解决方案的可能途径包括:

  1. 指定工件的版本。这将确保您使用正确的JAR,即使必须在local .m2 repository

    中找到它
    <dependency>
        <groupId>com.day.cq.dam</groupId>
        <artifactId>cq-dam-scene7</artifactId>
        <version>1.2.3</version>
        <scope>provided</scope>
    </dependency>
    
  2. 确保您的本地cq-dam-scene7项目包含正确的代码 - 即定义了uploadFile()方法的版本。

答案 2 :(得分:1)

我面临类似的问题,我在工作区有两个Maven项目。主项目使用Helper项目的输出JAR作为工件。

现在问题是Main项目正在尝试引用Helper项目的JUnit库(具有旧版本4.10),而不是它自己的版本为4.12的JUnit库。由于这种不正确的引用,我在主项目中遇到了构建错误。

我找到的唯一解决方法是关闭Helper项目并仅在工作区中打开Main项目。

可能这是一个Eclipse bug。

答案 3 :(得分:0)

删除.m2中的存储库文件夹(在您的用户目录中),让maven在下一个构建周期中重建它。 它将确保没有旧的罐子在本地缓存