java - 有没有办法在使用 maven-jlink-plugin 的同时添加 maven 依赖项?

标签 java maven jodatime java-9 jlink

我正在使用这个 Github project接触 Java 9 中的新模块化功能。我想向项目添加依赖项并能够构建 native 镜像。但是,当我尝试向 pom.xml 添加新的依赖项,并将 requires 语句添加到 module-info.java 时,我从 maven-jlink-plugin 中收到以下错误:

Error: module-info.class not found for joda.time module

我正在尝试将其用作概念证明,即我可以使用新的链接阶段部署图像,但自然我需要能够具有外部依赖性并且我需要使用 maven(工作约束)。

对 mod-jar/pom.xml 的更改

...
 <dependencies>
    <dependency>
      <groupId>joda-time</groupId>
      <artifactId>joda-time</artifactId>
      <version>2.9.9</version>
    </dependency>
  </dependencies>
...

mod-jar/module-info.java

module com.soebes.nine.jar {
  requires java.base;
  requires joda.time;
  exports com.soebes.example.nine.jar;
}

日志:

[INFO] --- maven-jlink-plugin:3.0.0-alpha-1:jlink (default-jlink) @ mod-jlink ---
[INFO] Toolchain in maven-jlink-plugin: jlink [ /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home/bin/jlink ]
[INFO] The following dependencies will be linked into the runtime image:
[INFO]  -> module: com.soebes.nine.one ( /Users/sebastianrestrepo/Projects/jdk9-jlink-jmod-example/maven-example/mod-1/target/jmods/com.soebes.nine.one.jmod )
[INFO]  -> module: com.soebes.nine.two ( /Users/sebastianrestrepo/Projects/jdk9-jlink-jmod-example/maven-example/mod-2/target/jmods/com.soebes.nine.two.jmod )
[INFO]  -> module: com.soebes.nine.jar ( /Users/sebastianrestrepo/Projects/jdk9-jlink-jmod-example/maven-example/mod-jar/target/com.soebes.nine.jar-1.0-SNAPSHOT.jar )
[INFO]  -> module: joda.time ( /Users/sebastianrestrepo/.m2/repository/joda-time/joda-time/2.9.9/joda-time-2.9.9.jar )
[ERROR] 
Error: module-info.class not found for joda.time module
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] parent ............................................. SUCCESS [  1.460 s]
[INFO] com.soebes.nine.one ................................ SUCCESS [  2.022 s]
[INFO] com.soebes.nine.two ................................ SUCCESS [  1.392 s]
[INFO] com.soebes.nine.jar ................................ SUCCESS [  1.388 s]
[INFO] mod-jlink .......................................... FAILURE [  1.061 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 7.911 s
[INFO] Finished at: 2017-11-03T15:27:35-04:00
[INFO] Final Memory: 26M/981M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-jlink-plugin:3.0.0-alpha-1:jlink (default-jlink) on project mod-jlink: 

如果有任何帮助,我将不胜感激。谢谢。

最佳答案

这有 not much to do with the plugin I believe .在您的案例中,模块 joda.time 似乎是一个自动模块

jlink tool does not support linking of automatic modules因为它们可以依赖类路径的任意内容,这与独立的 Java 运行时的理念背道而驰。

所以有两种方法可以解决这个问题:-

  • (您不拥有该 jar)暂时继续创建一个 module-info.java[您可以 use jdeps tool for it] 并使用相应的编译类更新 jar [使用 jar 工具],就像在 Java 9 下的项目中一样。

  • (你拥有依赖项)将 jar 永久迁移到 Java 9 本身,在编译和打包后它将由 module-info.class 本身组成。

关于java - 有没有办法在使用 maven-jlink-plugin 的同时添加 maven 依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47103221/

相关文章:

java - 方法主体外的 java 类中的字段初始化

java - sbt 测试编码问题

java - 我需要控制台应用程序方面的帮助吗?

maven - 使用Gradle,Jenkins和Sonar实现CI/CD Flow

java - 将 DateTime 对象与 JODA 进行比较时的奇怪行为

java - 解析 xs :date with timezone into Joda LocalDate

java - 使用 jsp :param/c:param in a Portlet Environment

java - 如何让Eclipse/SparkJava/Maven协同工作?

java - 如何在 Eclipse 中调试 Maven 项目?

java - 使用 joda time 提取秒数直到午夜