加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

是否可以在javac(JDK 9)中混合使用–class-path和–module-path

发布时间:2020-12-15 07:38:31 所属栏目:Java 来源:网络整理
导读:当我编译一个依赖于我之前编译的其他模块的模块时,我必须指定–module-path directory选项.这使我依赖的模块可见. 但与此同时,我还想让一些非模块化的Jar文件可见.但是,如果不使它们成为自动模块,只需在–module-path directory旁边指定–class-path some.ja
当我编译一个依赖于我之前编译的其他模块的模块时,我必须指定–module-path< directory>选项.这使我依赖的模块可见.

但与此同时,我还想让一些非模块化的Jar文件可见.但是,如果不使它们成为自动模块,只需在–module-path< directory>旁边指定–class-path some.jar,那么javac似乎忽略了claspath并抛出“package yyy not found”和其他“未找到”的错误.

我可以理解在相同(编译)时使用–class-path和–module-path是非法的,但是javac并没有以任何方式警告我.

解决方法

您可以并行使用类路径和模块路径,但需要考虑一些细节.

依赖模块路径?>类路径

显式模块(模块路径上具有模块描述符的JAR)无法读取未命名的模块(类路径上的JAR) – 这是为了防止模块化JAR依赖于“类路径的混乱”而完成的.

由于模块必须要求其所有依赖项,并且那些只能由其他命名模块(即类路径上的JAR)来实现,因此模块化JAR的所有依赖项必须放在模块路径上.是的,即使是非模块化的JAR,也会变成automatic modules.

有趣的是,自动模块可以读取未命名的模块,因此它们的依赖关系可以在类路径上进行.

依赖类路径?>模块路径

如果您编译非模块化代码或从非模块化JAR启动应用程序,则模块系统仍在运行,并且由于非模块化代码不表示任何依赖性,因此它不会从模块路径解析模块.

因此,如果非模块化代码依赖于模块路径上的工件,则需要使用the --add-modules option手动添加它们.不一定是所有这些,只是您直接依赖的(模块系统将引入传递依赖) – 或者您可以使用ALL-MODULE-PATH(查看链接的帖子,它会更详细地解释这一点).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读