当前位置: 首页 > 知识库问答 >
问题:

类路径真的不能被Java模块访问吗?

农飞星
2023-03-14

我对Java 9模块应该具有的假设行为有点困惑。在O'Reilly的Java 9模块化中,我阅读了以下语句:

模块无法读取类路径,因此我们的模块无法访问类路径上的类型,如图8-1所示。

...

未命名模块导出类路径上的所有代码,并读取所有其他模块。然而,有一个很大的限制:未命名的模块本身只能从自动模块中读取!

但是,在尝试解决Eclipse上的问题(maven依赖项位于类路径而不是模块路径)时,我注意到我的应用程序的启动器设置与我阅读的内容冲突。这是它执行的命令行:

/opt/jdk-16+36/bin/java -Dfile.encoding=UTF-8
-p /home/lgmonezi/workspace/my.test/target/classes
-classpath /home/lgmonezi/.m2/repository/org/hsqldb/hsqldb/2.6.0/hsqldb-2.6.0.jar
-XX:+ShowCodeDetailsInExceptionMessages
-m my.test/net.lgmonezi.test.main.FileNode

虽然是模块信息。java存在,应用程序唯一的外部依赖是hsqldb-2.6.0 jar。但它位于类路径中,由显式模块(而不是自动模块)访问。代码运行良好。它不应该抛出异常吗?

共有1个答案

荆鸿畅
2023-03-14

我们的模块无法访问类路径上的类型

您的代码没有(直接)使用任何HSQLDB类,因此没有访问检查。

类路径上的JDBC驱动程序使其自动注册java的实现。sql。驱动程序通过服务提供者加载机制与JDBC框架接口。(见JDBC 4规范第9.2.1节)

除了自动注册过程之外,没有代码(您的或框架)“直接访问”任何HSQLDB代码。这一切都是通过接口完成的。

 类似资料:
  • 我想访问项目“\src\main\resources”的资源形式,但由于任何原因,我只能访问目标类。这是我的代码: 这里是我的Project Dir: 问题是,即使我删除了目标/类中的所有文件并运行代码,编译器也会将文件从“src/main/ressource”复制到“目标/类”中并从那里读取它们。

  • 我有一个Java 8应用程序,我正在将其转换为Java 11,当然,我第一次使用这个模块系统。 我设置了应用程序Maven程序集配置,以便将所有JAR文件放在bin发行版的 /lib目录中。然后,maven-jar-plugin使用所有JAR文件名设置MANIFEST Class-Path值。应用程序使用简单的运行 转到Java11,如果我继续以这种方式构建bin分发,我很想知道运行时如何解释MA

  • 我似乎找不到任何关于在运行时扫描所有可用类(用于接口、注释等)是否仍然可行的信息,就像Spring、Reflections和许多其他框架和库当前所做的那样,面对与Jigsaw相关的类加载方式的更改。 编辑:这个问题是关于扫描实际的物理文件路径以查找类。另一个问题是动态加载类和资源。这是相关的,但不是重复的。 最新消息:Jetty项目已就此提出了一项标准化API的JEP提案。如果你有办法帮助实现这一

  • 我有一个用Java8写的项目,我想把它更新到Java9。所以我把这些类分成了两个独立的模块。模块: 和目录中的。在我开始更新到Java9之前,它的构建是用Gradle自动化的。该模块使用模块中包含的抽象类实现。 在目录 中的 。我想使用Maven自动构建它。模块需要模块。 文件树类似于: 或 base/src/main/java/org/ggp/base/validator/opnfvalidat

  • 问题内容: 我有两节课: MyApplication 库 该库已被编译为Library.class,并且源代码不再可用。我现在正在尝试从源代码编译MyApplication。MyApplication取决于库。该库的软件包名称为org.myCompany。我尝试将我的类路径设置为以下内容: 产生以下javac编译器错误消息: 所以我将类路径更改为: 产生完全相同的错误消息。 如何设置Windows

  • 问题内容: 面对Jigsaw的相关更改,我似乎找不到任何信息,以了解是否仍然可以在运行时扫描所有可用的类(用于接口,批注等),就像Spring,Reflections和当前其他许多框架和库那样。类的加载方式。 编辑 :此问题是关于 扫描 实际的物理文件路径以查找类。另一个问题是关于动态 加载 类和资源。它是相关的,但 绝不是重复的 。 更新 :Jetty项目已经为此制定了标准化API的 JEP提案