javac中-classpath用法小结.doc

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
javac中-classpath用法小结

javac中-classpath用法小结 javac 的classpath用法小结: 1、-cp和-classpath 这两个是代表相同的含义。指的是你的待编译的java文件用到的其他class文件存放的地方。如果有多个的话,以分号分割。 2、-verbose 将会显示javac是如何执行编译的过程显示出来。 需要特别注意的是,源文件逻辑所在包的层次和源文件在硬盘上实际存放的文件夹的层次的对应关系是一致的。如有一个Pawn.java文件,在chess.pieces包里。那么,该java文件肯定是放在某个路径的\chess\pieces文件夹下。如果还有一个Board.java文件,在包chess内,那么肯定在\chess文件夹下。如果Board.java用到了Pawn类,那么,就需要在Board.java内添加import chess.pieces.*;这个都知道了,现在主要问题是,该在哪一个文件路径层次来编译这个Board.java,需要为-classpath指定什么参数。这个还是回到包的层次和实际文件夹的层次的对应关系的问题:在编译器看到import chess.pieces.*的时候,会把chess.pieces翻译成2层的文件夹,即\chess\pieces,然后去这个文件夹路径下查找class文件。假设Pawn.java已经编译成为了Pawn.class文件(这个由于比较传统,一般都不会产生问题),现在来编译Board.java。如果是在chess文件夹下来编译(即cmd窗口的当前路径是..\chess),那么在编译器处理“import chess.pieces.*;”的时候,会在当前的文件夹下(chess)找chess\pieces文件夹。但是很明显,现在已经是在chess文件夹下了,只需去pieces下找就行了,这就肯定找不到,因为不存在..\chess\chess\pieces,只有..chess\pieces。所以需要在chess的上一层文件夹下来编译,这样,其\chess\pieces才会真正定位到Pawn.class所在的文件夹下。javac -classpath . chess\*.java 这条指令才会执行成功。了解包的层次和实际文件夹的层次的对应关系是关键(注意到一个小圆点,代表当前路径)。我们也可以思考:如果我就想在chess文件夹下编译,难道不可以吗?-classpath就是要指定一个搜索路径,难道不能用吗?可以的,即把classpath指定为一个固定的文件路径,如我的chess文件夹是在e:\practice文件夹下,那么,我就可以这样指定:javac -classpath e:\practice chess\*.java 这同样指定了chess的父路径,编译器会从这个父路径为起点,找chess\pieces文件夹,从而找到相关的class文件来装入。还有一个方法:在chess文件夹下在新建chess\pieces文件夹(即e:\practice\chess\chess\pieces),并且把原pieces的java文件编译后得到的class文件放在此处(可以用-d选项,或直接拷贝进去),然后在e:\practice\chess下来执行javac -classpath . chess\*.java这条编译指令。这样也能编译成功,因为在当前的chess文件夹下确实存在了chess\pieces文件夹,而且里面包含了所需要的class文件。像上面的javac -classpath e:\practice chess\*.java 编译指令,其实可以在任何路径下执行(当然后面的*.java要指定正确的路径),因为都是固定的路径。那么,为什么要用".",而不是用固定的路径呢?因为源文件存放的地方除了包的层次和文件夹层次一致外,可以在任何地方存放,如我的chess下的源文件我可以不放在e:\practice下,我可以放在f:\mypractice下,等等。用"."就可以灵活的定位当前的路径。这也是我们在安装jdk时,设置classpath要把"."加进去的原因。(现在的jdk1.6我就知道不需要设置classpath了,因为其javac已经设置了自动去jdk的安装路径找了——JAVA_HOME还是要的)。 下面是一些成功或失败的编译指令执行的过程,以供参考: E:\practice>javac -verbose -classpath e:\practice;e:\junit4.8.2\junit-4.8.2.jar chess\*.java [解析开始时间 chess\AllTests.java] [解析已完成时间 32ms] [解析开始时间 chess\Board.java] [解析已完成时间 0ms

文档评论(0)

htfyzc + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档