如何从maven依赖项构建java 9依赖项

时间:2017-11-02 16:53:06

标签: java maven java-9 modularity module-info

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?

2 个答案:

答案 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