我相信同时使用和选项并不违法。可以同时使用两者,因为即使您没有显式指定类路径,它也默认为当前目录。--classpath
--module-path
来自消息和 javac 工具文档的详细信息javac -help
-
--module-path <path>, -p <path>
指定在何处查找应用程序模块
--class-path <path>, -classpath <path>, -cp <path>
指定查找用户类文件和注释处理器的位置
如果未指定 --class-path
、-classpath
或 -cp
,则用户类路径为当前目录。
编辑:感谢@MouseEvent,我可能会错过问题中的部分
但是,如果不使它们成为自动模块,而只是指定 --class-path some.jar 紧挨着 --module-path ,那么 javac 似乎会忽略 claspath 并抛出“包 yyy 未找到”和其他“未找到”错误。
如果您不使它们自动,它将被视为模块系统的未命名模块,并且 -
实际上,命名模块甚至不能声明对未命名模块的依赖关系。此限制是有意为之,因为允许命名模块依赖于类路径的任意内容将使可靠的配置变得不可能。
此外,未命名的模块将导出其所有包,因此自动模块中的代码将能够访问从类路径加载的任何公共类型。
但是,使用类路径中的类型的自动模块不得将这些类型公开给依赖于它的显式模块,因为显式模块不能声明对未命名模块的依赖关系。
例如,如果显式模块中的代码引用了 中的公共类型,并且该类型的签名引用了仍在类路径上的某个 JAR 文件中的类型,则 中的代码将无法访问该类型,因为不能依赖于未命名的模块。com.foo.app
com.foo.bar
com.foo.app
com.foo.app
这可以通过暂时视为自动模块来补救,以便其代码可以从类路径访问类型,直到类路径上的相关 JAR 文件可以被视为自动模块或转换为显式模块。com.foo.app