求助:Java 9模块化中javax.ws.rs.core.MediaType对应的requires模块名
Java 9模块化中jboss-jaxrs-api_2.0_spec的模块声明问题
获取准确自动模块名的最可靠方法
别靠猜测模块名,直接用Java自带的jar命令解析目标JAR文件:jar --file=jboss-jaxrs-api_2.0_spec-1.0.0.Final.jar --describe-module执行后会直接输出该JAR对应的自动模块名,把这个名字放到
module-info.java的requires语句里就能解决编译错误。手动推导自动模块名的规则(供参考)
自动模块名的生成逻辑大致是:- 去掉JAR文件名末尾的版本号(比如
-1.0.0.Final) - 将文件名中的下划线
_替换为点. - 忽略
-spec这类特殊后缀
按这个规则,你这个JAR的自动模块名应该是jboss.jaxrs.api.2.0.spec,但还是建议用上面的命令验证准确性。
- 去掉JAR文件名末尾的版本号(比如
备选解决方案
如果自动模块的方式存在问题,可以把该JAR转换为显式模块:- 解压目标JAR文件
- 在根目录添加
module-info.java,示例内容如下:module jboss.jaxrs.api.2.0.spec { exports javax.ws.rs.core; // 按需添加其他需要导出的JAX-RS相关包 } - 重新编译打包成JAR,替换原文件后,在你的模块中添加
requires jboss.jaxrs.api.2.0.spec;即可。
内容的提问来源于stack exchange,提问作者Kavindu Nilshan
相关产品推荐
相关产品推荐

