关于Javac命令和类文件之间的依赖问题

    今天,笔者遇到了一个小问题:在使用原始的javac编译Java类文件时,如果当前类文件对其他类有依赖,那么,就可能会出现问题。
    举例如下:笔者在桌面新建一个文件夹test,然后建立两个类:A.javaB.java,如下图:
     
    
两个类的代码都很简单,其中B类对A类有依赖:
     
然后,我们分3种情况分析:

情况① :

    直接用javac命令编译两个源文件,结果如下:


    可以看到编译成功,生成了对应的class文件。

情况②: 
    删去情况①中生成的class文件,我们在B.java中利用import语句导入一个包

然后重新编译这两个文件,结果如下:
 
    可以看到,B.java文件编译失败,这是因为javax.servlet.*包并非Java标准类库中的内容,因此编译器找不到对应的包,就会出错。
    我们将需要的jar文件放入当前目录,并使用-cp参数将库文件导入,然后继续编译:
 
编译结果如下:
 
    此时,依旧编译失败,但提示的是找不到类A,这是因为,默认情况下,编译器会在当前目录下寻找需要的类文件,我们使用cp参数修改了类文件查找路径,而并没有包含当前目录,因此,编译失败。我们在使用cp参数时,需要将当前目录包含进去:
     
    可以看到编译成功。 

情况③:
    删除情况②生成的class文件,我们在A.javaB.java文件中添加package语句,将文件夹test记录在代码中:

    继续使用情况②中编译成功的命令来编译,结果如下:

    可以看到,编译器再一次找不到类A,这是因为,添加了package语句后,编译器需要找的是test.A类,编译器会首先找到test目录,然后再从test目录中找到A,此时当前目录中(test目录内)不存在test子目录,因此,编译器找不到A类,编译失败。这说明我们包含的类路径需要包括类所在的包,这里需要包含test目录的上一级子目录。
    修改命令行,编译结果如下:
     
可以看到,编译成功。 

通过对以上三种情况的分析,这里总结如下:
(1)利用javac进行编译时,默认情况下的类搜索路径为当前路径。
(2)如果类中包含了Java标准类库中以外的类,则需要利用-cp参数指定类搜索路径。
(3)如果需要的类指定了类所在的包,那么-cp参数指定的类搜索路径应包含该类所在的包。
  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值