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

时间:2019-05-29 05:15:36

标签: java java-9 jigsaw

在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命令仍然存在,它现在起什么作用?

1 个答案:

答案 0 :(得分:1)

是的,java 9+会采用类似于CLASSPATH的MODULEPATH。

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

如果在模块路径上放置一个普通的jar,它将变成一个自动模块,导出其程序包(并为其保留这些程序包)。

尽管您可以将任何普通的jar文件放入MODULEPATH中,但有一个限制:如果2个jar文件包含相同的包,则java不允许在模块路径中同时使用它们。 这就是Java仍然具有类路径的原因,因为几个现有的jar文件仍具有重叠的程序包,并且不可能将它们全部放在MODULEPATH上。必须先清理它们。

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