Maven jar依赖项显示在"Maven依赖项"视图之外

Luc*_*cky 5 java eclipse spring maven m2e

我最近开始开发一个Spring MVC maven项目.mvn eclipse:eclipse从运行配置运行命令后,所有maven依赖项都显示在项目外部,而不是"Maven Dependencies"层次结构视图下.当我从Java EE将项目透视图切换到Java时,可以在下面找到依赖项Referenced Libararies.

截图

我的.project.classpath元数据文件内容.

有人知道如何在Maven Dependencies视图下显示所有的罐子吗?

See*_*ose 7

我想,给出答案可能比写评论更好.

Maven Eclipse插件

假设您有以下项目目录:

/hello-world/
   +-- src/
   +-- pom.xml
Run Code Online (Sandbox Code Playgroud)

你现在mvn eclipse:eclipse在该目录中运行一个eclipsify它.这将创建一些元文件:

/hello-world/
   +-- src/
   +-- pom.xml
   +-- .project
   +-- .classpath
Run Code Online (Sandbox Code Playgroud)

.project文件将包含该语句的注释行

NO_M2ECLIPSE_SUPPORT:M2Eclipse不支持使用maven-eclipse-plugin创建的项目文件.

.classpath会像这些依赖项:

<classpathentry kind="var" path="M2_REPO/com/google/guava/guava/18.0/guava-18.0.jar" sourcepath="M2_REPO/com/google/guava/guava/18.0/guava-18.0-sources.jar"/>
<classpathentry kind="var" path="M2_REPO/junit/junit/4.12/junit-4.12.jar" sourcepath="M2_REPO/junit/junit/4.12/junit-4.12-sources.jar"/>
<classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar" sourcepath="M2_REPO/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3-sources.jar"/>
Run Code Online (Sandbox Code Playgroud)

请注意,这些条目使用的是eclipse内部变量:M2_REPO,它指向您的本地maven存储库.所有这些条目都是简单的库条目.与将库添加到构建路径时相同.

如果您现在通过"现有项目导入工作区"将其导入,您将完全获得您描述的项目.库是简单的类路径条目.并且 - 更重要的是 - 它没有maven性质(它缺少小"M"图标)..project文件中提到了这一点.没有maven性质,您没有为此项目提供一些有用且重要的功能.

Eclipse Maven插件

所以,让我们修复它.首先备份项目目录(如果出现任何问题).

第一步是从eclipse中删除项目,而不是从硬盘中删除.所以只需在eclipse中删除它,但不要勾选"删除磁盘上的项目内容".你还想拥有这个项目,不是吗?

第2步:导航到项目目录并删除任何eclipse元文件(我已经告诉过你).之后,您拥有与初始情况相同的项目目录.

第3步:现在您可以使用"Existing Maven Projects"将此项目导入eclipse.浏览到包含项目的目录(可能是工作空间目录)并选择您的项目.

之后你会注意到这个项目现在具有maven性质.项目图标上有一个"M"图标.此外,您将在"Maven依赖关系"节点下看到所有库.

为什么会这样?让我们再看看元文件:

.project文件现在还包含以下行(以及其他行):

<buildCommand><name>org.eclipse.m2e.core.maven2Builder</name></buildCommand>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
Run Code Online (Sandbox Code Playgroud)

.classpath现在还具有以下条目:

<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
    <attributes>
        <attribute name="maven.pomderived" value="true"/>
    </attributes>
</classpathentry>
Run Code Online (Sandbox Code Playgroud)

M2E插件现在正在完成其余的工作.容易,不是吗?