Как построить зависимости java 9 из зависимостей maven
Java9 представила сильную модульность, аналогичную OSGI и Maven Dependecies.
Есть ли плагин maven, способный построить зависимости java 9 для проверки зависимостей maven?
Например, из
<groupId>com.mycompany.app</groupId>
<artifactId>my-module</artifactId>
....
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>23.3-jre</version>
</dependency>
в
module my-module{
requires com.google.guava;
exports com.mycompany.app;
}
Я читал эту статью, но она не очень полезна - Как выразить зависимость в maven от функций Java Java для перехода на Java 9?
2 ответа
Чтобы ответить на вопрос точно, названия модулей в module-info
как упоминается в вопросе, как com.google.guava
По-видимому, называются автоматическое имя модуля. Как правило, если у вас уже есть jar с Java 8 для вашего приложения, скажем, yourApp.jar
с вышеуказанной конфигурацией maven. Вы можете использовать jdeps
инструмент как:-
jdeps --generate-module-info <output-dir> /path/to/yourApp.jar
который будет генерировать module-info.java
для вашего jar, который вы можете использовать в дальнейшем при переносе того же проекта в Java 9.
Текущий соответствующий плагин под названием maven-jdeps-plugin
похоже, не поддерживает эту задачу. Несмотря на то, что он все еще находится в стадии разработки, и это может измениться, если владельцы увидят его эффективным в рабочем процессе Maven.
Edit :: На случай, если вы найдете задачу полезной, эту функцию можно запросить на трекере MJDEPS.
В этом репозитории github есть плагин https://github.com/moditect/moditect позволяющий сделать это.
В вашем примере поместите следующее в сборку maven:
<plugin>
<groupId>org.moditect</groupId>
<artifactId>moditect-maven-plugin</artifactId>
<version>1.0.0.Alpha2</version>
<executions>
<execution>
<id>add-module-infos</id>
<phase>package</phase>
<goals>
<goal>add-module-info</goal>
</goals>
<configuration>
<module>
<moduleInfo>
<name>com.mycompany.app.my.module</name>
</moduleInfo>
</module>
</configuration>
</execution>
</executions>
</plugin>
и под target/moditect
вы можете найти сгенерированный module-info.java