3

在以前的 Java 版本中,例如,如果您在具有目录结构的 windows 中有一个用户定义的包 org.mypackage

D:\myprogram\
      |
      ---> org\  
            |
            ---> mypackage\
                     |
                     ---> HelloWorld.class       
                     ---> SupportClass.class   
                     ---> UtilClass.class     

您可以使用 CLASSPATH 环境变量让 JVM 知道该包。

例如:

set CLASSPATH=D:\myprogram

命令是否set MODULEPATH让 JVM 知道最新版本 Java 中用户定义模块的位置?

如果是这样,为什么 classpath 命令仍然存在,它现在有什么用途?

4

1 回答 1

1

不,jdk 不读取任何 MODULEPATH 环境变量或类似的。

MODULEPATH 仅作为命令行参数存在--module-path,而不作为环境变量存在。

http://mail.openjdk.java.net/pipermail/jigsaw-dev/2016-September/009345.html

与 CLASSPATH 不同,没有等效的 MODULEPATH 可以从命令行中获取选项。

另请参阅链接的问题Is it possible to mix --class-path and --module-path in javac (JDK 9)? 有关两条路径之间差异的更多详细信息。

如果你把一个普通的 jar 放在模块路径上,它就会变成一个自动模块,导出它的包(并为自己保留这些包)。

虽然您可以将任何普通的 jar 文件放入 MODULEPATH,但有一个限制:如果 2 个 jar 文件包含相同的包,那么 java 将不允许它们都在 MODULEPATH 中。这就是为什么 Java 仍然有 classpath 的原因,因为几个现有的 jar 文件仍然有重叠的包,并且不可能将它们都放在 MODULEPATH 上。他们必须先清理干净。

在遥远的将来,当所有库都迁移到模块(或清理)时,也许可以删除类路径。

于 2019-05-29T06:15:25.930 回答