Java 中的 modulepath 环境变量类似于 CLASSPATH

modulepath environment variable in Java similar to CLASSPATH

在以前的 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 命令仍然存在,它现在有什么用?

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

MODULEPATH 仅作为 command-line 参数 --module-path 存在,而不作为环境变量存在。

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

Unlike CLASSPATH, there is no equivalent MODULEPATH to get the option off of the command line.

另请参阅链接问题 ,了解有关这两个路径之间差异的更多详细信息。

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

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

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