彻底理解javac命令-cp参数

本文详细解析了在哪些情况下需要使用javac命令的-classpath (-cp) 参数,包括引入外部jar包、处理包名下的类以及未指定包名的情况。通过实例展示了如何正确指定类文件的查找路径,以确保编译成功。
部署运行你感兴趣的模型镜像

一般情况下当我们写的java程序之中不包含除标准类库的其他类那么直接可以直接使用javac javasourcepath(java源文件的全路径)直接编译成功

 

例如有这样一个类在E:\eclipse_workspace_2018\jvm\src\jvm\demo>目录下,可以看到其中没有使用到除标准类库外的其他类那么这时就可以直接使用javac E:\eclipse_workspace_2018\jvm\src\jvm\demo\Test2.java就可以编译成功了。

一般在下述情况时要使用 -cp参数指定javac命令查找类文件所在的路径位置

1.在程序中加上一个外部jar包的类的import 这里使用了外部的servlet-api.jar

 

2.指定了包名(package jvm.demo) Test1.java使用了Test2.java的静态常量S1

3 未指定包名 Test1.java使用了Test2.java的静态常量S1

其中上述三种情况若是都使用javac Test1.java (除了第三种不指定包名的情况) 都是会编译失败的.下面解释一下原因

javac默认是从当前路径开始搜索使用到的类,我们是在E:\eclipse_workspace_2018\jvm\src\jvm\demo路径下执行的javac编译命令

第一种情况:Test1.java中import了javax.servlet.* 那么编译命令会在当前目录(E:\eclipse_workspace_2018\jvm\src\jvm\demo)下搜索javax.servlet包,这肯定是找不到的,那么这时需要使用-cp参数给他指定在D:\servlet-api.jar中查找,即使用javac -cp D:\servlet-api.jar Test1.java即可编译成功

第二种情况:Test1.java会在当前目录下查找Test2.java,因为指定了包(package jvm.demo),那么他会在当前目录下(E:\eclipse_workspace_2018\jvm\src\jvm\demo)查找package所指定包的子路径, 即E:\eclipse_workspace_2018\jvm\src\jvm\demo\jvm.demo,这肯定也是找不到的,那么这是需要使用-cp参数将查找路径指定在E:\eclipse_workspace_2018\jvm\src(../../)即可,即使用javac -cp ../../ Test1.java即可编译成功

第三种情况:同第二种情况擦不到,所不同的是未自动包名,则javac在当前路径下即可搜索到Test2.java,所以javac Test1.java即可编译成功

总结

待编译类未使用package指定包名,javac默认类搜索路径是当前路径,找到的类的路径为package + className(例:com.mh.Test)

待编译类使用了外部jar中的类 需使用-cp参数指定它的位置

待编译类使用了package指定了包名,javac默认会从当前目录找package的子目录,需使用-cp参数包所在的根目录

-cp指定多个路径时用“;”分隔,“.”代表当前路径

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值