Скажем, у меня есть проект Java с использованием Maven 3 и junit. Есть каталоги src/main/java
и src/test/java
, в которых находятся основные исходники и исходники тестов соответственно (все стандартно).
Теперь я хочу перенести проект на Java 9. src/main/java
content представляет модуль Java 9; там com/acme/project/module-info.java
выглядит примерно так:
module com.acme.project {
require module1;
require module2;
...
}
Что, если тестовый код нуждается в module-info.java
собственном? Например, чтобы добавить зависимость от какого-то модуля, который нужен только для тестов, а не для производственного кода. В таком случае я должен поставить module-info.java
на src/test/java/com/acme/project/
, присвоив модулю другое имя. Таким образом, Maven, кажется, рассматривает основные источники и тестовые источники как разные модули, поэтому мне нужно экспортировать пакеты из основного модуля в тестовый модуль и требовать пакеты в тестовом модуле, примерно так:
основной модуль (в src/main/java/com/acme/project
):
module prod.module {
exports com.acme.project to test.module;
}
тестовый модуль (в src/test/java/com/acme/project
):
module test.module {
requires junit;
requires prod.module;
}
Это производит
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:testCompile (default-testCompile) on project test-java9-modules-junit: Compilation failure: Compilation failure:
[ERROR] /home/rpuch/git/my/test-java9-modules-junit/src/test/java/com/acme/project/GreeterTest.java:[1,1] package exists in another module: prod.module
потому что один пакет определяется в двух модулях. Так что теперь у меня должны быть разные проекты в основном модуле и тестовом модуле, что не очень удобно.
Я чувствую, что иду по ложному пути, все начинает выглядеть очень некрасиво. Как я могу использовать свой module-info.java
в тестовом коде или как добиться тех же эффектов (require
и т. Д.) Без него?
module-info
в тесте разве с моей точки зрения не имеет смысла? За этим стоит особое требование / достижение? - person khmarbaise   schedule 07.10.2017