在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命令仍然存在,它现在起什么作用?
答案 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上。必须先清理它们。
在不久的将来,当所有库都已迁移到模块(或清理了)时,也许可以删除类路径。