- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
javac 参数(-classpath, -sourcepath)详解
首先是官方说法:
-classpath:
设置用户类路径,它将覆盖 CLASSPATH 环境变量中的用户类路径。若既未指定
CLASSPATH 又未指定 -classpath,则用户类路径由当前目录构成。
-sourcepath:
指定用以查找类或接口定义的源代码路径。与用户类路径一样,源路径项用分号 (;) 进行分隔,它们可以是目录、JAR 归档文件或 ZIP 归档文件。如果使用包,那么目录或归档文件中的本地路径名必须反映包名。
注意:通过类路径查找的类,如果找到了其源文件,则可能会自动被重新编译。
官方说法很简洁,但是具体操作起来总觉得不太清晰,我们还是找几个例子,来具体分析一下:
具体例子:
假设我们有如下的目录结构:
src-|
|-foo-|
|-Testfoo.java
|-baz-|
|-Testbaz.java
classes-|
其中 Testfoo.java:
package foo;
public class Testfoo {
//....
}
其中 Testbaz.java:
package baz; import foo.Testfoo;
public class Testbaz {
//...
}
也就是说 Testbaz 对 Testfoo 有引用。
我们目标是把 Testbaz 编译到目录 classes 里面,试用如下的命令:
javac -d classes src/baz/Testbaz.java
命令失败,因为找不到它依赖的 Testfoo。我们可以用以下三种方式来实现:
我们最容易考虑到的就是编译被依赖的 Testfoo 类,并将其加入 Testbaz 的 CLASSPATH
javac -d classes src/foo/Testfoo.java
javac -d classes -classpath classes src/baz/Testbaz.java
第二行使用了-classpath,使得编译器在寻找 Testfoo 类的时候以 classes 为根目录,根据根目
录和 package 名,类名最终定位了需要用的(已编译出来的)Testfoo 类。
在编译 Testbaz 的时候把被依赖的 Testfoo 类加入 SOURCEPATH
javac -d classes -sourcepath src src/baz/Testbaz.java
在编译条件里面加入-verbose 可以很清楚的看到,编译器在寻找 Testfoo 类的时候,以 src 为
根目录,根据根目录和 package 名,类名最终定位了需要用的(源代码)Testfoo 类。
把 CLASSPATH和 SOURCEPATH两者都加进来
javac -d classes src/foo/Testfoo.java
javac -d classes -sourcepath src -classpath classes src/baz/Testbaz.java
两个属性都被加入,编译器首先会判断 Testfoo.class 和 Testfoo.java 是否同时存在。如果单独存在,则适应于以上的方法之一。如果同时存在,则判断.class 是否是.java 的最新编译,如果有差异,则重新编译.java 来覆盖.class
有必要补充一下-d 参数:
-d 参数是很好的把源程序和目标代码分离的参数。-d 制定的是目标代码的根目录,源文件的包的结构将以目录形式反映到根目录上。美中不足的是-d 需要指定已经存在的目录,不能自动创建。
文档评论(0)