如何在多模块Maven项目中添加org.jsoup模块并使用jlink编译?
解决jlink打包时找不到org.jsoup模块的问题
1. 先确认模块声明与jsoup jar的有效性
- 检查
module2的module-info.java,确保已正确添加requires org.jsoup;声明 - 执行命令验证jsoup jar的模块信息:
确认输出的模块名是jar --describe-module --file Project/jars/org.jsoup.jarorg.jsoup,如果模块名不符,需重新用jdeps生成并指定模块名:# 生成模块信息文件 jdeps --generate-module-info . --module-name org.jsoup org.jsoup-xxx.jar # 编译模块信息并注入原jar javac -d generated-module-info generated-module-info/org/jsoup/module-info.java jar uf org.jsoup-xxx.jar -C generated-module-info/org/jsoup module-info.class
2. 调整Maven依赖配置,确保模块路径包含jsoup jar
在module2的pom.xml中,将本地jsoup jar配置为system依赖,并确保编译器能识别:
<dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>你的版本号</version> <scope>system</scope> <systemPath>${project.basedir}/../jars/org.jsoup.jar</systemPath> </dependency> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <release>17</release> <!-- 替换为你的Java版本 --> <modulepath> <path>${project.basedir}/../jars/org.jsoup.jar</path> </modulepath> </configuration> </plugin>
3. 配置maven-jlink-plugin的模块路径
在执行jlink的模块(如module3)的pom.xml中,确保jlink插件的模块路径包含jsoup jar所在目录:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jlink-plugin</artifactId> <version>3.3.0</version> <configuration> <modulePath> <path>${project.basedir}/../jars</path> <path>${maven.compiler.modulepath}</path> <path>${maven.runtime.modulepath}</path> </modulePath> <modules> <module>module3</module> <!-- 你的主模块名 --> </modules> <outputDirectory>${project.build.directory}/jlink-image</outputDirectory> </configuration> </plugin>
4. 手动执行jlink的命令行写法
如果不用Maven插件,直接命令行执行jlink时,需明确把jsoup jar加入模块路径:
jlink --module-path "JDK路径/jmods:项目模块jar目录:Project/jars/org.jsoup.jar" --add-modules module3 --output jlink-image
内容的提问来源于stack exchange,提问作者mr.ANDREW
相关产品推荐
相关产品推荐

