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

标签 java java-9 java-platform-module-system module-path

<分区>

在以前的 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 仅作为命令行参数 --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.

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

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

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

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

关于java - Java中类似于CLASSPATH的modulepath环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56353523/

相关文章:

java - 小程序 : What's saved on the client's machine?

java - 在哪里可以找到 Java 9 模块描述符引用?

java - 使用 GWT 生成硬拷贝或屏幕截图

java - 点到线距离 (2D) 和交点坐标

Spring 5 在其响应式特性中支持 Java 9 Flow APIs?

gradle - JUnit 5、Java 9 和 Gradle : How to pass --add-modules?

java - 使用 Java EE API 替换已弃用的 JPMS 模块

java - 使用模块时如何修补 package-info.java 文件?

java - com.google.inject 包可从多个模块访问

java - 哪里可以下载openjdk10源码包(openjdk-10*_src.tar.gz....)?