Java Maven clean+;构建会导致Eclipse中的项目显示错误,直到在Eclipse中清除为止

Java Maven clean+;构建会导致Eclipse中的项目显示错误,直到在Eclipse中清除为止,java,eclipse,maven,Java,Eclipse,Maven,我们的开发环境中出现了一种非常奇怪的行为,这种行为与我们在不同操作系统上的所有开发人员都是一致的 我们在开发环境中有大约20多个Maven(3.0.4)项目,它们都是Eclipse(Indigo)中的开放项目,sonatype m2e(0.12.0)像往常一样处理依赖项。(m2e 1.0给我们带来的问题多于解决方案) 在我们20多个项目中,有一个项目表现得很奇怪。 在该项目上执行mvn clean install时,即使Maven成功通过了,它也会导致4个java文件(在单元测试中,如果有任何区

我们的开发环境中出现了一种非常奇怪的行为,这种行为与我们在不同操作系统上的所有开发人员都是一致的

我们在开发环境中有大约20多个Maven(3.0.4)项目,它们都是Eclipse(Indigo)中的开放项目,sonatype m2e(0.12.0)像往常一样处理依赖项。(m2e 1.0给我们带来的问题多于解决方案)

在我们20多个项目中,有一个项目表现得很奇怪。 在该项目上执行
mvn clean install
时,即使Maven成功通过了,它也会导致4个java文件(在单元测试中,如果有任何区别的话)在Eclipse中显示错误

错误类型为“SomeNameOfClass无法解析为类型”,尽管打开文件并按错误类引用上的F3(打开声明)可以找到没有问题的类

mvn-clean
是问题所在,如果我们只运行
mvn-install
这不会发生

Eclipse的Project->Clean清除了错误,一切正常

这不是一个实际妨碍我工作或类似工作的操作问题,我可以通过在Eclipse中清理来解决它,我只是讨厌每次都这样做,我不能在我的项目中忍受红色的X,即使它们没有任何效果


我真的很好奇为什么会发生这种情况,为什么特别是这4门课?为什么?:)

不久前,我们遇到了完全相同的问题。我们有20多个项目出现了同样的错误。根据我们所做的调查,我们得出结论,当运行
maven clean install
时,eclipse会失去对类文件的跟踪,并认为其中一些是未定义的。 我们的解决方案是在命令行中发出以下命令:

mvn eclipse:clean
mvn clean install
mvn eclipse:eclipse

现在可以在
运行配置
中的
刷新
选项卡下指定项目完成后需要刷新。您必须检查
完成后刷新资源
并选择下面的行为。

我发现在maven中有一个jar作为“测试”范围将导致“未解决类型”错误,并且除了将其从pom文件中的测试范围中取出之外,我还没有发现任何其他方法可以修复它。

如果您想通过UI消除错误,执行以下步骤:

在eclipse中选择您的项目并执行ALT+ENTER或右键单击项目->构建路径->配置构建路径

选择Java构建路径选项和选项卡

选择显示错误的节点,例如src/main/java,然后单击删除,然后单击应用

再次使用添加文件夹选项添加相同(已删除)的节点,然后单击应用并关闭按钮


错误应该已经消失

你能给出更多关于这些测试类的精确性吗?是否有其他测试类的行为符合预期?它们是否有特定的路径?如前所述,您应该提供更多详细信息。这些文件是生成的吗?这些文件是常规java文件,不是生成的。它们以Test作为后缀,并包含一些方法,这些方法与普通JUnit类一样用@Test注释。。被引用的类显示为
无法解析为类型
是抽象的。需要注意的另一件事是,虽然java文件X中的错误是
Y无法解析为类型
,但Y中没有错误。是否将项目作为java或Maven项目导入?您可以通过检查PackageExplorer中的小项目图标来判断这一点:对于Java,右上角的J;对于Maven,左上角的M。。。不应该再使用了。更好的方法是在Maven上下文菜单中进行更新项目配置。@GETah虽然您的建议会删除错误,但它会破坏.Project和.classpath。这些文件在我们的源代码管理中,在每个构建中更改它们不是一个好的选择。我想我可以这样做,然后在一切完成后执行
git签出--.project
git签出--.classpath
,但这似乎有点麻烦。@Enrico我认为将eclipse设置置于版本控制之下不是一个好主意。您应该只将源代码和pom文件置于源代码管理之下。@GETah在源代码管理中具有.project和.classpath会同步每个人的设置,它允许我们不懂java的开发人员简单地导入一个项目,让一切都正常工作。我选择了一个正确的答案,因为如果您不控制.project和.classpath的源代码,它确实可以解决问题。。。