什么是 org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER 以及如何使它在 IntelliJ 中工作?

Posted

技术标签:

【中文标题】什么是 org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER 以及如何使它在 IntelliJ 中工作?【英文标题】:What is org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER and how do I make it work in IntelliJ? 【发布时间】:2016-10-04 03:19:49 【问题描述】:

我有一个用 Eclipse 编写的 Java 代码库,我正在尝试在 IntelliJ 中使用它。 该代码库由大约 20 个 Java 包组成,这些包作为单独的项目彼此并排构建。 (大约有二十个目录,每个目录都包含一个.classpath.project 文件。)它们相互依赖。大概一切都在 Eclipse 中构建得很好。

我让 IntelliJ 从 Eclipse 构建格式导入这些。除了Project Settings -> Modules -> Dependencies 表明许多项目对org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER 存在未解决的依赖关系之外,它似乎大部分都有效。这似乎来自.classpath 文件中的以下条目:

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

具有此依赖关系的包不会在 IntelliJ 中构建,因为它们无法解析对其他包的依赖关系。

我怀疑org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER 是一些特定于 Eclipse 的诡计,不会转换为不同的 IDE,但我无法弄清楚这里到底发生了什么。

org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER 是什么?我是否必须对使用它的构建环境做任何特别的事情才能使它在 Eclipse 之外工作?

IntelliJ Ultimate 2016.1.2、Java 1.8.0_91、OS X 10.11.5


我通过进入项目设置->模块并在我的各个项目之间手动添加模块依赖关系来解决这个问题,直到一切都建立起来。乏味但有效。

不过,我将把这个问题留在这里,因为org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER 的简短定义仍然对我有帮助。

【问题讨论】:

一个Maven项目一般只包含pom.xmlsrc文件夹。其余的是 IDE 特定文件(.project.classpath 是 Eclipse 特定的)。因此,您应该只在切换 IDE 时复制这两件事。然后,所有 IDE 都可以导入 Maven 项目并生成所需的 hack 文件。同样,您应该只对这两件事进行版本控制。 我知道。我同意。如果将其构建为单个 Maven 项目会更好,并且将特定于 IDE 的文件(如 .project.classpath 签入源代码控制)绝对是代码异味。不幸的是,这是编写代码库的方式,我必须让它工作。 如果这些是真正的 maven 项目,您应该能够直接打开根文件夹。这将识别 pom.xml 文件并将整个树作为项目打开。然后忽略 Eclipse 文件。 每个单独的项目都是 vanilla Maven,因此 IntelliJ 能够正确设置它们。问题是没有*** Maven 项目将它们捆绑在一起。模块内依赖项以 IntelliJ 无法识别的特定于 Eclipse 的方式指定。我怀疑 org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER 是 Eclipse 的做法。 您应该尝试在您的根项目中创建一个 POM 文件并添加以下语句以进行多模块编译。见modules这个使用reactor来编译你的项目避免编译顺序问题 【参考方案1】:

简介

IntelliJ IDEA Maven-2 插件将 Maven-2 集成到 IntelliJ IDEA。

首先,

第二,

第三,

与 Ant 插件类似,Maven-2 插件允许执行目标(或阶段)并将输出(带有错误突出显示)重定向到消息窗口。

安装

可通过 IDEA 内置插件管理器或直接从 IDEA 6.0(直到 1.1 版也适用于 IDEA 5.0)提供 http://plugins.intellij.net/plugin/?id=1166。

如果您下载了插件,只需将二进制存档的内容提取到您的 IDEA 插件目录中。 提取的文件夹 (idea-maven-plugin) 包含另一个文件夹 lib,所有 JAR 都驻留在其中。

用法

假设您已经指定了环境变量 JAVA_HOME 和 M2_HOME,插件应该可以在没有任何进一步配置的情况下运行。 如果未定义 JAVA_HOME,则插件使用内部 IDEA JDK。

如果未定义 M2_HOME,则必须在配置对话框中指定 Maven-2 的主目录。这是从插件版本 1.1 开始的更改。

在 1.1 版之前,Maven 是通过正常 Maven 安装提供的启动脚本调用的。为了更好地访问正在运行的 Maven 进程,现在通过启动 Java 进程直接调用 Maven。例如,这允许用户终止正在运行的 Maven 进程。

可以通过两种方式进行配置:

通过 IDE 设置或项目设置。 项目设置始终覆盖应用程序设置!

该插件不适用于 6.0 之前的 IDEA 版本! 该插件在 Windows 和 Linux 下进行了测试。它没有在 Mac OS X 下测试。

资源链接:

    Maven 2 Integration Import Maven dependencies in IntelliJ IDEA

【讨论】:

此插件不适用于 IDEA 13+。抛出错误NoSuchMethodError: com.intellij.openapi.fileChooser.FileChooser.chooseFiles(Lcom/intellij/openapi/project/Project;Lcom/intellij/openapi/fileChooser/FileChooserDescriptor;)[Lcom/intellij/openapi/vfs/VirtualFile; intellij-lessc-plugin 插件会出现此问题。此问题已在此处修复:github.com/acdvorak/intellij-lessc-plugin/issues/…。也可以看这里:IDEA13 compatiblity issues【参考方案2】:

我想出了一个适合我的解决方案,但赏金仍然是开放的(因为我无法关闭它:P)并且会去找可以提供更详细解释的人。

解决方案:运行mvn eclipse:cleanmvn eclipse:eclipse。这会导致 maven 清除 .classpath 文件并从 pom.xml 重建它。有点神秘的是,它不再包含对org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER 的可怕引用。

也许这是 Eclipse 中不推荐使用的标记/变量。

【讨论】:

以上是关于什么是 org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER 以及如何使它在 IntelliJ 中工作?的主要内容,如果未能解决你的问题,请参考以下文章

eclipse导入maven项目,不能导入maven依赖,Maven Dependencies栏没有出现

maven dependencies没有

刚刚装的ECLIPSE,配置了阿里云的MAVEN,没有maven dependencies,也没有 enable maven dependency

新建maven项目

maven项目中找不到Maven Dependencies解决办法

maven项目引入jar包