2

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; 
}

我已经阅读了这篇文章,但它并不是那么有用 - 如何在 maven 中表达对 java ee 特性的依赖以过渡到 Java 9?

4

2 回答 2

7

为了准确地回答这个问题,像per say 中module-info所引用的模块名称称为自动模块名称。通常,如果您的应用程序已经有一个带有 Java 8 的 jar,那么假设使用上述 maven 配置。您可以将该工具用作:-com.google.guavayourApp.jarjdeps

jdeps --generate-module-info <output-dir> /path/to/yourApp.jar

这将为module-info.java您的 jar 生成 jar,您可以在将同一个项目迁移到 Java 9 时进一步使用它。

名称下的当前对应插件maven-jdeps-plugin似乎不支持此任务。尽管它仍在进行中,如果所有者认为在 Maven 工作流程中引入有效,这可能会投入使用。

编辑 ::万一您发现任务有用,可以在MJDEPS 跟踪器上请求该功能。

于 2017-11-02T16:56:26.790 回答
4

这个 github repo 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

于 2017-11-26T11:27:27.040 回答