У меня есть проект maven (3.6.0), основанный на Java 11 со следующей структурой (которая отлично работает в командной строке!):
src/main/java/
module-info.java
/de/test/tp/TP.java
src/test/java/
/de/test/tp/test/TPTests.java
Модуль-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 / update», затмение помещает все maven-зависимости в classpath . После перекомпиляции затмение говорит мне:
The package org.apache.logging.log4j is accessible from more than one module: <unnamed>, org.apache.logging.log4j
для обоих org.apache.logging.log4j
импортов.
Итак, вопрос в том, как это исправить?
Обновление 1
Что мне действительно нужно, так это четкая структура проекта для проекта java-модулей, основанная на maven, работающая в eclipse и поддерживающая тестирование белого и черного ящиков. Может кто-нибудь дать мне такой скелет проекта?
Обновление 2
Или моя проблема в том, что у eclipse нет многомодульной поддержки, как я читал в некоторых статьях? - Что также привело бы меня к вопросу об обновлении 1.
Обновление 3
Сократил весь вопрос и добавил полное (сокращенное) содержимое файла.
Примечание 1
Во время всех моих испытаний, например, с наличием секунд module-info.java под test/java/
, я обнаружил, что eclipse 2019-03 очень нестабилен и имеет ошибки! Например - Иногда при попытке удалить тестируемый модуль-info.java - Eclipse не смог удалить его. Другой эффект состоял в том, что при редактировании module-info.java с помощью тестового пути eclipse также редактировал модуль-info.java под основным путем. Это означает, что в основном модуле-info.java я обнаружил, что экспорт изменился на de.test.tp.test - когда я это исправил (в редакторе eclipse), я не смог сохранить файл. Когда я исправил это во внешнем редакторе и обновил / очистил проект, затмение все еще говорит мне, что файл de.test.tp.test не существует, поэтому я должен удалить ошибки вручную со вкладки маркера.
Так что, с моей точки зрения, в eclipse 2019-03 есть некоторые ошибки, связанные с обработкой java-модулей.
Примечание 2
Как видно из комментариев ниже, @howIger сообщил об этом как об ошибке в Eclipse .
Примечание 3
Похоже, это исправлено в затмении 2019-06:)