在 Eclipse 中,模块路径和类路径之间有什么区别?
在 Eclipse 中,模块路径和类路径之间有什么区别,我应该使用哪一个在 lib 文件夹中添加 JAR 文件?
为什么 JRE 系统库出现在模块路径中?
在 Eclipse 中,模块路径和类路径之间有什么区别,我应该使用哪一个在 lib 文件夹中添加 JAR 文件?
为什么 JRE 系统库出现在模块路径中?
模块系统对代码的影响主要有以下几点:
java.util
java.base
java.util.logging
java.logging
)java.lang.reflect.AccessibleObject.setAccessible(boolean)
类路径上的所有代码都一起存在于“未命名”模块中。模块路径上的所有代码都位于它们自己的“命名”模块中。
您必须区分两种情况:
如果不向项目添加模块信息.java,则项目将成为未命名模块的一部分,并且可以查看未命名模块中的所有其他代码,以及根模块中模块中的代码和模块中的代码。基本上,这意味着在类路径上的 w.r.t. 代码,一切仍然像 Java 8 中一样工作,所以你应该把你的依赖关系放在类路径上。java.base
java.se
如果您的项目中有一个 module-info.java,则您的项目将位于其自己的命名模块中,并且只能看到代码和其他命名模块,这些模块是使用 module-info 中“require”子句的引用.java。由于命名模块只能通过模块路径找到,因此应将依赖项放在模块路径上。这甚至适用于在Java 9之前创建的jar,它将获得从.jar文件名派生的模块名称(在这种情况下,它们被称为“自动”模块)。java.base
JRE 始终位于模块路径上,因此即使从类路径上的代码中也无法访问其内部代码。
有一种特殊情况:如果您的项目中有一个模块信息.java,并且您的项目中有测试代码,那么您通常不想在 .有两种解决方案:module-info.java
创建专用的测试模块。这一直是基于osgi的项目的惯例。缺点是只能在测试中使用公共 API
Maven 使用的解决方案:将测试依赖项放在类路径上。在编译测试代码时,Maven 添加了命令行选项,允许命名模块中的代码读取未命名模块(这无法通过 module-info.java)。
在Eclipse Oxygen中,Maven解决方案是不可能的,因为它不知道哪个代码是测试代码,但这已经在即将发布的Eclipse Photon(4.8)版本中实现,该版本将于6月发布。您已经可以使用 http://download.eclipse.org/eclipse/downloads/(功能完备的)里程碑版本。如果您发现任何错误,请在 https://bugs.eclipse.org/bugs/ 报告。