Java 11+能否无需编译直接运行多依赖源文件?
Java 11+ 无编译运行多源文件(带依赖)的可行方案
结论是可以,但你当前的命令用法不符合Java 11+单文件执行的规则,导致找不到类。以下是问题分析和正确操作方式:
错误原因
当你的类带有包声明(tem.meaw.mua)时,java命令需要根据包名匹配对应的目录结构,或者明确指定源文件的根路径。直接在命令行中罗列多个源文件(java -cp lib/gson-2.8.8.jar Tem.java Person.java)会忽略包路径的映射,导致JVM无法定位到Person类。
正确操作方式
方式1:遵循包名对应的目录结构
- 按照包名创建目录层级:
tem/meaw/mua,将Tem.java和Person.java都放入该目录中。 - 回到包含
tem目录的上级目录(即包的根目录),执行以下命令:
JVM会自动根据包名从指定的根目录下找到对应的源文件,同时加载java -cp lib/gson-2.8.8.jar tem.meaw.mua.Tem.java-cp指定的gson依赖。
方式2:使用--source-path指定源根
如果不想调整目录结构,可以通过--source-path参数告诉JVM源文件的根路径(比如当前目录就是源根),执行命令:
java -cp lib/gson-2.8.8.jar --source-path . tem.meaw.mua.Tem.java
这个参数会让JVM根据包名从指定的源根下查找对应的.java文件。
补充说明
- 如果类没有包声明,直接罗列多个源文件的方式(
java Tem.java Person.java)是可行的,但带包结构的类必须遵循上述规则。 -cp参数的用法保持不变,依然可以用来指定第三方依赖库,和多源文件的无编译运行完全兼容。
内容的提问来源于stack exchange,提问作者Maifee Ul Asad
相关产品推荐
相关产品推荐

