引入odfdom后Gradle项目出现Java模块解析异常如何解决?
问题
将现有非模块化应用改造为模块化应用时,添加org.odftoolkit:odfdom-java:0.10.0依赖后,运行出现以下错误:
java.lang.module.ResolutionException: Modules maven.core and maven.artifact export package org.apache.maven.artifact.repository to module org.json
未添加该依赖时项目可正常构建运行。相关配置文件如下:
build.gradle
plugins { id 'application' id 'org.javamodularity.moduleplugin' version '1.8.9' id 'org.openjfx.javafxplugin' version '0.0.10' id 'org.beryx.jlink' version "2.24.1" } repositories { mavenCentral() } sourceCompatibility = "11" targetCompatibility = "11" dependencies { implementation 'org.apache.logging.log4j:log4j-core:2.11.1' //automatic-module implementation 'com.google.code.gson:gson:2.9.1' //module implementation 'org.odftoolkit:odfdom-java:0.10.0' //none } javafx { version = 16 modules = ['javafx.controls'] } application { mainClass = "org.openjfx.HelloFX" mainModule = "hellofx" }
module-info.java
module hellofx { requires javafx.controls; requires org.apache.logging.log4j; exports org.openjfx; }
解决方案
排除冲突的传递依赖:odfdom-java依赖的maven.core和maven.artifact模块存在包导出冲突,在build.gradle中排除其中一个模块的传递依赖,测试功能是否受影响:
implementation('org.odftoolkit:odfdom-java:0.10.0') { exclude group: 'org.apache.maven', module: 'maven-artifact' }升级odfdom版本:尝试使用更高版本的odfdom-java,新版本可能已修复依赖结构问题,比如升级到0.12.0:
implementation 'org.odftoolkit:odfdom-java:0.12.0'将冲突模块转为自动模块:在build.gradle中配置moduleplugin,强制将冲突的maven模块转为自动模块,绕过严格的包导出检查:
modulePlugin { automaticModules = ['maven-core', 'maven-artifact'] }临时规避参数(不推荐长期使用):在jlink配置中添加JVM参数,允许两个模块同时导出冲突包:
jlink { jvmArgs = ['--add-exports', 'maven.core/org.apache.maven.artifact.repository=org.json', '--add-exports', 'maven.artifact/org.apache.maven.artifact.repository=org.json'] }
内容的提问来源于stack exchange,提问作者CT95
相关产品推荐
相关产品推荐

