首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有方法在使用maven-jlink-plugin时添加maven依赖项?

是否有方法在使用maven-jlink-plugin时添加maven依赖项?
EN

Stack Overflow用户
提问于 2017-11-03 19:30:55
回答 4查看 5K关注 0票数 8

我使用这个Github项目来接触Java9中新的模块化特性,我希望向项目中添加依赖项,并能够构建一个本地映像。但是,当我尝试向pom.xml添加一个新的依赖项,并将requires语句添加到模块-info.java时,我从maven-jlink-plugin中得到以下错误:

代码语言:javascript
复制
Error: module-info.class not found for joda.time module

我试图用这作为一个概念的证明,我可以使用新的链接阶段部署映像,但自然地,我需要能够有外部依赖,我需要使用maven (工作约束)。

对mod-jar/pu.xml的更改

代码语言:javascript
复制
...
 <dependencies>
    <dependency>
      <groupId>joda-time</groupId>
      <artifactId>joda-time</artifactId>
      <version>2.9.9</version>
    </dependency>
  </dependencies>
...

mod-jar/模块-info.java

代码语言:javascript
复制
module com.soebes.nine.jar {
  requires java.base;
  requires joda.time;
  exports com.soebes.example.nine.jar;
}

日志:

代码语言:javascript
复制
[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: 

我真的很感谢你的帮助。谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-11-03 19:41:31

这里有我相信这和插件没什么关系。在您的示例中,模块joda.time似乎是一个自动模块。

工具不支持自动模块的链接。,因为它们可以依赖类路径的任意内容,这违背了自包含运行时的想法。

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

  • (您不拥有jar),暂时继续创建一个module-info.java(您可以为它创建一个工具 ),并使用相应的编译类更新jar工具,就像在Java9下的项目中一样。
  • (您拥有依赖性)永久地将jar迁移到Java9本身,在那里它将在编译和打包后由module-info.class本身组成。
票数 12
EN

Stack Overflow用户

发布于 2018-03-17 19:22:36

您可以使用ModiTect Maven插件向JAR添加模块描述符,并使用该模块创建模块运行时映像。

免责声明:我是ModiTect的作者。

票数 8
EN

Stack Overflow用户

发布于 2019-02-05 06:23:24

让我试着解释一下这方面的技术背景:

joda-time在2.9.9版本中给出的是一个非模jar,它不包含一个模块信息类,也不使用自动模块名称声明自己为一个自动模块:在它的META/MANIFEST.MF中

实际模块中的类不能调用类路径上的类,因此您不能使用模块中的"requires jode.time“来使用该版本。

自动模块可以在ClassPath上使用类。为了在实际模块中使用来自非模块jar的类,您可以使用包装器,它本身就是一个自动模块。

到现在为止,已经有了一个版本2.10.1的joda-time,它是一个自动模块,并声明了“自动模块名称: org.joda.time”,因此您可以在您的真实模块中使用"requires org.joda.time“来使用该新版本。

现在,新的jlink工具不能直接使用非模块化jars或自动jars,而且maven-jlink插件目前基本上只是jlink工具的maven包装器,将其配置参数转换为jlink工具的参数。

为了使用混合maven依赖项和实模块、自动模块和非模块jars为项目创建自定义Java运行时,您必须了解所有实模块、自动模块和非模块jars的系统模块依赖项,而不是使用-add参数来使用这些模块进行jlink。

要收集系统模块依赖项,您可以使用新的jdeps工具,根据实际使用的JDK版本,可以使用--print- you deps或-list-deps参数。

如果您在项目中使用maven,您可以通过创建或使用为您创建或使用的maven插件来自动化该任务。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47103221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档