gpt4 book ai didi

java - 关于 Java 模块和 Maven 的 Eclipse 2019-03

转载 作者:行者123 更新时间:2023-11-30 05:41:19 25 4
gpt4 key购买 nike

我有一个基于 java 11 的 Maven (3.6.0) 项目,其结构如下(在命令行上运行良好!):

src/main/java/
module-info.java
/de/test/tp/TP.java

src/test/java/
/de/test/tp/test/TPTests.java

module-info.java 如下所示:

module de.test.tp
{
exports de.test.tp;

requires org.apache.logging.log4j;
}

TP.java:

package de.test.tp;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class TP
{
private static final Logger LOGGER = LogManager.getLogger(TP.class);

public TP()
{
super();
LOGGER.info("test");
}
}

TPTests.java:

package de.test.tp.test;

import static org.junit.jupiter.api.Assertions.assertNotNull;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.jupiter.api.Test;

import de.test.tp.TP;

public class TPTests
{
private static final Logger LOGGER = LogManager.getLogger(TP.class);

public TPTests()
{
super();
}

@Test
public void defaultConstructor()
{
final TP tp = new TP();
assertNotNull(tp, "Default constructor failed!");
}
}

最后但并非最不重要的 pom.xml 的重要部分

  <build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<fork>true</fork>
<showDeprecation>true</showDeprecation>
<showWarnings>true</showWarnings>
<optimize>false</optimize>
<debug>true</debug>
<release>11</release>
</configuration>
</plugin>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.4.1</version>
</dependency>

</dependencies>
</plugin>
</plugins>
</build>

<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.4.1</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.11.2</version>
</dependency>

<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.11.2</version>
</dependency>

</dependencies>

当我现在(在 Eclipse 中)说“maven/更新项目”时,Eclipse 将所有 Maven 依赖项放入类路径。重新编译 eclipse 后告诉我:

The package org.apache.logging.log4j is accessible from more than one module: <unnamed>, org.apache.logging.log4j

对于两个 org.apache.logging.log4j 导入。

所以问题是,如何解决这个问题?

更新1

我真正想要的是一个基于maven、在eclipse中工作并支持白盒和黑盒测试的java模块项目的清晰的项目结构。有人能给我这样一个项目框架吗?

更新2

或者我的问题是 Eclipse 没有多模块支持,正如我在一些文章中读到的那样? - 这也会让我回到更新 1 的问题。

更新3

缩短了整个问题并添加了完整(缩短的)文件内容。

注1

在我的所有测试中,例如在 test/java/ 下有一个秒 module-info.java,我发现 eclipse 2019-03 非常不稳定并且存在错误!例如 - 有时当尝试删除测试中的 module-info.java 时 - Eclipse 无法删除它。另一个效果是,当使用测试路径 eclipse 编辑 module-info.java 时,也会编辑主路径下的 module-info.java 。这意味着在主 module-info.java 中,我发现 exort 已更改为 de.test.tp.test - 当我修复该问题(在 Eclipse 编辑器中)时,我无法保存文件。当我在外部编辑器中修复该问题并刷新/清理项目时,Eclipse 仍然告诉我 de.test.tp.test 将不存在 - 所以我必须从标记选项卡中手动删除错误。

因此,从我的角度来看,eclipse 2019-03 在处理 java 模块方面存在一些错误。

注2

正如您从下面的评论中看到的那样,@howIger 已将此报告为 bug in Eclipse .

注3

在我看来,它现在已在 eclipse 2019-06 中修复:)

最佳答案

该错误表明有多个模块(可能是一个 JAR)包含包 org.apache.logging.log4j (或者更准确地说,可以从中访问该包)。这是Java 平台模块系统 (JPMS) 不允许的。但在这种情况下,只有一个 JAR 包含该包,因此在 Eclipse 2019-03 (4.11) 中错误地显示了此错误。请参阅:

Eclipse bug 546315 - "The package […] is accessible from more than one module: , […]" error shown in Java editor by mistake

作为此错误的解决方法,请执行以下操作之一:

  • module-info.java中添加行requires org.apache.logging.log4j.core;,它会拉取所有相关的JAR模块路径
  • 忽略错误(因为它不会阻止代码编译)
  • 降级到 Eclipse 2018-12 (4.10) 或等到 Eclipse 2019-06 (4.12)

默认情况下,所有 Maven 依赖项都位于类路径上。在 module-info.java 中,requires org.apache.logging.log4j; 行使用 org.apache.logging.log4j 提取 JAR模块路径上的模块。该错误错误地指出类路径上有另一个 JAR(因此在未命名模块中)也包含包org.apache.logging.log4j。请注意,modules-info.test(文件扩展名为 .test)既不是 Java 也不是 Maven 事物,因此对于 Eclipse 来说只是一个文本文件。

多模块支持:在您的情况下,您只有一个 module-info.java,这意味着您只有一个 Java 模块。在 Eclipse 中,每个 Java 模块都需要一个 Java 项目(因为每个模块都有自己的依赖项)。

关于java - 关于 Java 模块和 Maven 的 Eclipse 2019-03,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55579192/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com