依赖javax.transaction-api:1.3时javac断言错误的解决咨询
解决JDK 10中
java.transaction模块冲突导致的编译断言错误 你完全猜对了!这个断言错误的根源就是JDK 10自带的java.transaction内置模块,和javax.transaction-api:1.3 jar包清单里声明的自动模块名完全重复,导致编译器在处理模块依赖时触发了内部断言检查失败。
下面是两个可行的解决方案:
方案1:使用--patch-module合并模块内容
这个编译选项可以把第三方jar的内容“补丁”到JDK内置的java.transaction模块中,让编译器只识别到一个模块,彻底消除冲突。
编译时添加以下参数:
--patch-module java.transaction=./path/to/javax.transaction-api-1.3.jar
注意替换./path/to/为你实际的jar文件路径。你的module-info.java不需要修改,依然保留requires java.transaction;即可。
方案2:修改第三方jar的自动模块名
如果你不想修改内置模块的内容,可以给javax.transaction-api:1.3指定一个不冲突的自定义模块名,避免和JDK内置模块重名。
步骤1:修改jar的清单文件
使用JDK自带的jar命令重新打包jar,修改它的Automatic-Module-Name字段:
jar --update --file javax.transaction-api-1.3.jar --manifest-entry "Automatic-Module-Name=com.javax.transaction.api"
这里我们把模块名改成了com.javax.transaction.api,你也可以换成其他不冲突的名称。
步骤2:更新module-info.java
修改你的模块依赖声明,指向新的模块名:
module my.component { requires com.javax.transaction.api; // 其他依赖模块... }
之后正常编译即可,不会再出现断言错误。
内容的提问来源于stack exchange,提问作者Stéphane Appercel




