Как построить зависимости 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

Другие вопросы по тегам