Java简单模块创建:完成基础配置打包后是否还需其他操作?
你的模块化库是否已经完成?
如果你的库只需要供模块化Java项目(即同样带有module-info.java的项目)使用,且不需要支持非模块化的传统类路径项目,那你目前的操作已经足够,算是完成了。
不过如果有以下需求,你可能需要额外操作:
- 兼容非模块化项目:如果要让你的库能被基于类路径的传统项目使用,建议在JAR的
MANIFEST.MF中添加Automatic-Module-Name: org.foo.bar(和你的模块名保持一致)。虽然JVM会自动给无显式模块名的JAR生成一个自动模块名,但手动指定能避免因JAR文件名变化导致模块名不一致的问题。 - 需要反射访问:如果使用你库的代码需要通过反射访问
org.foo.bar.pkgname包内的类成员,那你需要在module-info.java里把这个包开放出来,而不只是导出:
或者如果只需要给特定模块开放反射权限,可以写module org.foo.bar { exports org.foo.bar.pkgname; opens org.foo.bar.pkgname; // 允许反射访问 }opens org.foo.bar.pkgname to com.other.module;
另外,打包时要确认module-info.class和所有包内的.class文件都被正确包含进JAR了。比如用jar命令打包时,确保路径正确,不要遗漏文件。
内容的提问来源于stack exchange,提问作者BillRobertson42
相关产品推荐
相关产品推荐

