错误:自动模块不能与jlink:spring.web一起使用

dpiehjr4  于 5个月前  发布在  Spring
关注(0)|答案(1)|浏览(69)

我尝试为我的JavaFx项目使用spring RestTemplate,该项目是用Java 17创建的。即使在module-info.java文件中添加了spring.web模块,当应用程序用javafx:jlink构建时,也会出现错误,如下所示。

Error: automatic module cannot be used with jlink: spring.web from file:///C:/Users/mafei/.m2/repository/org/springframework/spring-web/6.1.1/spring-web-6.1.1.jar

字符串
如何解决这个问题?

jaxagkaj

jaxagkaj1#

jlink无法链接自动模块(自Java 21起)

正如纳曼在评论中指出的那样:
您必须等待作者为正在使用的库发布JPMS模块
这是因为jlink不支持链接automatic modules

备选案文

  • 手动创建模块信息并将其添加到现有的jar文件中。对于所有不包含已定义模块信息的直接 * 和传递 * 依赖项,或者
  • 找到并使用一个工具来创建并添加模块信息到现有的jar文件中,或者
  • 选择不将自动模块定义为必需模块,而是将它们包含在类路径而不是模块路径中。
  • 需要定制生成的jlink映像,以包含所需的非模块化jar文件,并需要定制jlink运行时启动脚本,以将这些jar文件放置在类路径上。

有关其中一些选项的信息,请参阅相关问题:

  • 如何修复“自动模块名称不能与jlink一起使用”?
    使用Spring时(自Spring 6.1起)

不幸的是,对于Spring模块,等待Spring开发人员为他们的软件定义带有module-info.java的JPMS模块可能需要很长时间(或者根本不会发生)。
我推荐另一种方法。例如,使您的应用程序非模块化,将JavaFX用作模块(最简单的方法是使用包含JavaFX的JDK,如阿苏尔或Liberica“JDK FX”或“Full JDK”),并使用jpackage打包您的软件(不幸的是,jpackage使用起来比jlink更复杂,无法生成跨平台包,并且生成与jlink不同的打包)。
1为Spring添加jlink支持的跟踪问题(通过为框架定义模块信息文件)是Declare Spring modules with JDK 9 module metadata SPR-13501 #18079。这是2015年9月24日提出的Spring框架的当前开放问题,也是6.x backlog的一部分(因此目前没有计划在即将发布的版本中交付)

相关问题