【问题标题】:Why and when is Eclipse putting Maven dependencies in the CLASSPATH and not in the MODULEPATH?Eclipse 为什么以及何时将 Maven 依赖项放在 CLASSPATH 中而不是 MODULEPATH 中?
【发布时间】:2020-05-27 08:32:21
【问题描述】:

我有一个 Java 11 项目,它定义了一个 module-info.java 并与 JPMS 兼容 - 除了它需要来自其他尚未关心 JPMS 的开发人员的未命名模块。

当我把Maven依赖放在模块路径下,也就是Eclipse的.classpath里我有

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

然后一切正常。但是,当我在 Eclipse 中选择 Maven -> Update Project 时,Eclipse 将删除该行

        <attribute name="module" value="true"/>

之后,项目在 Eclipse 中显示错误(“无法解析类型 xxx。它是从所需的 .class 文件中间接引用的。”)。

如何告诉 Maven 在“Maven -> 更新项目...”时保留 &lt;attribute name="module" value="true"/&gt;

(Eclipse 版本为 2020-03)

【问题讨论】:

  • 请展示一个最小示例来重现此问题(pom.xmlmodule-info.java 和 Java 代码)。
  • 您是否尝试过打开“配置构建路径”对话框并将“Maven 依赖项”项从类路径拖到模块路径?
  • 是的。我试过了。它的工作原理是 Update Project Eclipse 就会把它改回来。问题是关于“Maven -> 更新项目...”

标签: java eclipse maven java-platform-module-system


【解决方案1】:

我在我的pom.xml 中使用它:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.1</version>
    <configuration>
        <source>${java.version}</source>
        <target>${java.version}</target>
        <release>${java.version}</release>
        <fork>true</fork>
        <showWarnings>true</showWarnings>
        <debug>true</debug>
        <debuglevel>source,lines</debuglevel>
        <verbose>true</verbose>
        <modulePath>
            <dependency>org.apache.logging.log4j:log4j-api</dependency>
            <dependency>org.apache.logging.log4j.core:log4j-core</dependency>
            ... etc ...
        </modulePath>
    </configuration>
</plugin>

但不幸的是,有些modulePath &gt; dependency 工作正常,有些则不行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 2015-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-11
    相关资源
    最近更新 更多