You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

依赖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

火山引擎 最新活动