Maven jar 依赖项显示在“Maven Dependencies”视图之外

Maven jar dependencies are displayed outside `Maven Dependencies` view

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

下找到依赖项

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

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

@Lucky 关闭日食。从命令提示符执行 eclipse:clean 并将项目导入为 Maven 项目..(假设您在 eclipse 中安装了 maven 插件)。我认为这会以所需的方式显示它。

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

Maven Eclipse 插件

假设您有以下项目目录:

/hello-world/
   +-- src/
   +-- pom.xml

你现在运行那个目录里面的mvn eclipse:eclipseeclipsify它。这将创建一些元文件:

/hello-world/
   +-- src/
   +-- pom.xml
   +-- .project
   +-- .classpath

.project 文件将包含带有语句

的注释行

NO_M2ECLIPSE_SUPPORT: Project files created with the maven-eclipse-plugin are not supported in M2Eclipse.

.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"/>

请注意,这些条目使用了一个 Eclipse 内部变量:M2_REPO,它指向您的本地 Maven 存储库。毕竟这些条目都是简单的库条目。与将库添加到构建路径时得到的相同。

如果您现在通过 "Existing Projects into Workspace" 导入它,您将完全获得您描述的项目。库是简单的 类路径条目 。而且 - 更重要的是 - 它没有专家性质(它缺少 "M" 小图标)。 .project 文件中提到了这一点。没有 Maven 特性,您将无法获得此项目的一些有用且重要的功能。

Eclipse Maven 插件

所以,让我们修复它。先备份工程目录(以防万一)

第一步是从 eclipse 中删除项目,而不是从硬盘中删除。所以干脆在eclipse中删除,但是不要勾选"Delete project contents on disk"。你还想拥有这个项目,是吗?

第 2 步:导航到项目目录并删除任何 eclipse 元文件(我已经告诉过您)。之后你的项目目录和初始情况一样。

第 3 步:现在您可以使用 "Existing Maven Projects" 将此项目导入到 eclipse 中。浏览到包含您的项目的目录(可能是工作区目录)和 select 您的项目。

之后您会注意到该项目现在具有 maven 性质。项目图标处有一个小 "M" 图标。此外,您将在 "Maven Dependencies" 节点下看到所有库。

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

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

<buildCommand><name>org.eclipse.m2e.core.maven2Builder</name></buildCommand>
<nature>org.eclipse.m2e.core.maven2Nature</nature>

.classpath 现在还有以下条目:

<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
    <attributes>
        <attribute name="maven.pomderived" value="true"/>
    </attributes>
</classpathentry>

M2E 插件现在正在完成剩下的工作。很简单,不是吗?