在Eclipse中,Maven项目未被视为Java项目

28
我正在处理一个包含多个 Maven 项目的项目。我一直在对这些项目进行大量的 JUnit 测试,通常都很顺利。我打开 Eclipse,在 package explorer 中右键单击 -> Import... ,选择 Existing Maven Projects 并成功导入项目。我可以构建,然后进入 src/test/java... 右键单击文件,执行 Run As JUnit 测试。不过偶尔会出现无法运行测试的情况。如果右键单击要运行的文件,则只会得到 AspectJ/Java 应用程序,没有 JUnit 测试选项。
我注意到项目文件夹旁边的图标只有 M 和文件夹图标,而能正常工作的项目则有文件夹、M 和 AJ 的图标。我还注意到它似乎没有像普通 Java 项目那样将文件分类到它们的包中。它似乎没有把这个项目当作一个 AspectJ 项目来处理。我该如何让 Eclipse 将这个 Maven 项目识别为一个 Java 项目?

你能想出这两个项目之间的区别吗?一个可以得到RunAsJunit,而另一个则不行。pom.xml文件可能有答案。 - milan
17个回答

42

现有的几个答案应该都可以解决问题,但是建议添加Java facet的方法只适用于已经是faceted性质的项目(或者你想将其转换为faceted),建议更改pom.xml的方法只在您将项目重新导入为Maven项目后才能生效。

如果您想“修复”现有项目,即添加Java性质而不将其转换为faceted形式,也不删除并重新导入,请编辑您的.project文件(在Eclipse中使用Navigator视图外部打开,因为它不会显示在您的包资源管理器中)并将Java builder和Java nature添加到现有的Maven builder/nature中:

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
    <name>yourprojectname</name>
    <comment></comment>
    <projects>
    </projects>
    <buildSpec>
        <!-- add this build command -->
        <buildCommand>
            <name>org.eclipse.jdt.core.javabuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <!-- this would've already been there -->
        <buildCommand>
            <name>org.eclipse.m2e.core.maven2Builder</name>
            <arguments>
            </arguments>
        </buildCommand>
    </buildSpec>
    <natures>
        <!-- add this nature -->
        <nature>org.eclipse.jdt.core.javanature</nature>
        <!-- this would've already been there -->
        <nature>org.eclipse.m2e.core.maven2Nature</nature>
    </natures>
</projectDescription>

请注意不同的大小写(javabuilder 但 maven2Builder,javanature 但 maven2Nature)。

一旦您保存,它应该自动重新构建。您可能需要手动添加任何源文件夹(项目属性 -> Java 构建路径 -> 选项卡 -> 添加文件夹...)。


2
我发现只需删除 .project 文件并重新导入 poms 也可以解决这个问题 - 尽管我无法弄清楚它是如何进入这种糟糕的状态的。 - bacar
1
但现在我的导入都错了,我有超过4000个构建错误。 - demongolem
@demongolem:抱歉,但是你的构建错误与我的回答有什么关系呢?如果在将Java性质添加到项目后出现构建问题,您可能需要提出单独的问题。 - Amos M. Carpenter
2
@demongolem:当然,我的建议不能解决“你的导入和你”可能存在的任何构建问题。(这是一个完全不同的问题,这就是为什么我建议提出一个单独的问题。)它将会将Java的特性添加到先前未被识别为Java项目的项目中。显然,一旦Eclipse尝试重新构建它,您可能需要做其他事情使其能够在没有错误的情况下进行构建,而且显然,如果在您添加了Java特性之后,您的项目以前根本未构建,并且在添加了Java特性之后,它确实可以进行构建,那么您必须解决任何构建错误。我的答案从未声称为您解决这些问题... - Amos M. Carpenter
1
@nessa.gp 我建议你向Eclipse提交一个错误报告,因为这个答案本质上是在告诉你如何解决Eclipse的一个bug。 - Jonathan Benn
显示剩余2条评论

21

右击 Project -> Properties -> Project Facets,然后选择适用于您情况的所有面貌(例如Java)。


我有同样的问题,属性中没有Facets。 - Amir-Mousavi
2
我的项目(作为Maven项目导入并转换为面向方面的项目)只有Javascript和静态Web模块选项 - 没有Java方面。有什么想法为什么缺少Java方面?我正在使用Oxygen.2 Release(4.7.2)。谢谢。 - jsaven

15

mvn eclipse:eclipse会创建必要的.project文件,这将为项目添加java性质和其他属性。


1
在执行 mvn eclipse:eclipse 命令之前,可能还需要执行 mvn eclipse:clean。最后按下 alt+F5,我的 Eclipse 工作区就恢复正常了。 - Ghurdyl
这个答案对我很有帮助。我认为这是最简洁的方法。谢谢! - Tarun Gupta
1
这个答案比排名第一的更好。通过添加Java Facet编辑.project文件或使用用户界面,我必须逐个模块地设置构建路径。但是,使用这种方法则是自动的。 - nessa.gp
Apache Maven Eclipse 插件(已停用)- 注意:此插件已停用,不再维护。 - Gerold Broser

6

我曾经遇到同样的问题,下面的步骤解决了我的问题:

1- 打开有问题的项目的 pom.xml 文件。

2- 在总览选项卡中检查 Artifact/Packaging 设置。

3- 如果设置为 "pom",请将其更改为 "jar"。

4- 保存更改,然后只从 eclipse 中删除项目,并重新导入它。

希望这可以帮助你!


这解决了我的问题。我的pom文件是从别处复制过来的,我没有意识到它包含了“<packaging>pom</packaging>”,直到我找到了这个答案。 - Patter

4

这取决于Eclipse项目面向的属性(如果你正在使用Java EE),我建议你右键单击项目属性并查看为其定义了哪些属性。


我认为这是许多人和其他问题的解决方案。将会把他们重定向到这个答案。非常感谢。 - Alejandro Teixeira Muñoz

3
我面临了同样的问题(将pom.xml导入到eclipse后,项目没有被视为Java项目,在项目构建器属性中只有“maven项目构建器”,但没有“Java构建器”),这发生在eclipse luna版本中。
删除“.settings”文件夹和“.project”文件后重新导入maven项目并没有奏效。对我而言,重新导入项目并切换工作区是有效的解决方法。

2
我和一位同事交流后,我“修复”了问题。我在Eclipse中执行了删除操作(而不是从磁盘上删除),然后立即重新导入Maven,现在它神奇地起作用了。
如果pom.xml存在错误,特别是父版本错误,那么maven项目就无法正确导入/创建。一旦我修复了POM中的问题,该项目就可以正常构建,没有任何问题,但仍然只是一个Maven项目。一旦我将其删除并重新导入,那么它才被视为Maven / AspectJ项目。

2
您可以接受自己的答案以关闭此问题。 - kriegaex

1
我知道这个问题已经很久了... 我通过以下两个步骤解决了这个问题。
1.在项目的根目录下运行cmd "mvn eclipse:eclipse" 2.在eclipse中右键单击该项目,然后选择"导入为项目"。

Apache Maven Eclipse 插件(已停用)- 注意:此插件已停用,不再维护。 - Gerold Broser

1
这可以通过两种方式实现。
1)更改项目性质。 右键单击项目->属性->项目性质,然后选择适用于您的情况的所有性质(例如java)。
(或者)
2)通过更新.project文件并添加项目所需的所有性质来实现。该.project文件位于项目的根文件夹中。如果由于任何原因该文件不存在,请创建一个新文件,并添加每个所需性质的部分,例如以下内容。
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
        <name>yourprojectName</name>
        <comment></comment>
        <projects>
        </projects>
        <buildSpec>
                <buildCommand>
                        <name>org.eclipse.jdt.core.javabuilder</name>
                        <arguments>
                        </arguments>
                </buildCommand>
                <buildCommand>
                        <name>org.eclipse.wst.common.project.facet.core.builder</name>
                        <arguments>
                        </arguments>
                </buildCommand>
                <buildCommand>
                        <name>org.eclipse.m2e.core.maven2Builder</name>
                        <arguments>
                        </arguments>
                </buildCommand>
        </buildSpec>
        <natures>
                <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
                <nature>org.eclipse.jdt.core.javanature</nature>
                <nature>org.eclipse.m2e.core.maven2Nature</nature>
        </natures>
</projectDescription> 

1
请检查pom.xml文件,查看未获得AspectJ性质(项目上的AJ)的项目。它们是否缺少AspectJ-Maven插件?它们应该有如下部分:
<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>aspectj-maven-plugin</artifactId>
    <executions>
      <execution>
        <goals>
          <!-- use this goal to weave all your main classes -->
          <goal>compile</goal>
        </goals>
      </execution>
    </executions>
    <configuration>
      <complianceLevel>1.6</complianceLevel>
    </configuration>
</plugin>

同时也请看一下他的问题:Eclipse中的Maven/AJDT项目


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接