Java9引入了类似于OSGI和Maven Dependecies的强大模块性。
是否有maven插件能够构建检测maven依赖关系的java 9依赖项?
例如,来自
<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;
}
我已阅读这篇文章,但它没那么有用 - How to express dependency in maven on java ee features for transition to Java 9?
答案 0 :(得分:5)
要准确回答这个问题,module-info
中所讨论的模块名称(例如com.google.guava
)称为自动模块名称。一般情况下,如果您的应用已经有一个带有Java 8的jar,请使用上面的maven配置说yourApp.jar
。您可以将jdeps
tool用作: -
jdeps --generate-module-info <output-dir> /path/to/yourApp.jar
将为您的jar生成module-info.java
,您可以在将同一项目迁移到Java 9时进一步使用它。
名称maven-jdeps-plugin
下的当前相应插件似乎不支持此任务。虽然它仍然可以Work in Progress,但如果在Maven工作流程中被所有者看到有效的话,可能会出现。
编辑 :: 如果您发现任务有用,可以在MJDEPS tracker.
请求该功能答案 1 :(得分:3)
这个github repo https://github.com/moditect/moditect中有一个插件允许这样做。
在您的示例中,将以下内容放在maven构建中:
Sales
,在<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