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]
[解析开始时间 chess\BoardTest.java]
[解析已完成时间 0ms]
[源文件的搜索路径: e:\practice,e:\junit4.8.2\junit-4.8.2.jar]
[类文件的搜索路径: E:\Program Files\Java\jdk1.6.0_10\jre\lib\resources.jar,E:\P
rogram Files\Java\jdk1.6.0_10\jre\lib\rt.jar,E:\Program Files\Java\jdk1.6.0_10\j
re\lib\sunrsasign.jar,E:\Program Files\Java\jdk1.6.0_10\jre\lib\jsse.jar,E:\Prog
ram Files\Java\jdk1.6.0_10\jre\lib\jce.jar,E:\Program Files\Java\jdk1.6.0_10\jre
\lib\charsets.jar,E:\Program Files\Java\jdk1.6.0_10\jre\classes,E:\Program Files
\Java\jdk1.6.0_10\jre\lib\ext\dnsns.jar,E:\Program Files\Java\jdk1.6.0_10\jre\li
b\ext\sunjce_provider.jar,E:\Program Files\Java\jdk1.6.0_10\jre\lib\ext\sunmscap
i.jar,E:\Program Files\Java\jdk1.6.0_10\jre\lib\ext\sunpkcs11.jar,E:\Program Fil
es\Java\jdk1.6.0_10\jre\lib\ext\localedata.jar,e:\practice,e:\junit4.8.2\junit-4
.8.2.jar]
[正在装入 java\lang\Object.class(java\lang:Object.class)]
[正在装入 junit\framework\TestSuite.class(junit\framework:TestSuite.class)]
[正在装入 java\util\ArrayList.class(java\util:ArrayList.class)]
[正在装入 e:\practice\chess\pieces\Pawn.class]
[正在装入 junit\framework\TestCase.class(junit\framework:TestCase.class)]
[正在装入 junit\framework\Test.class(junit\framework:Test.class)]
[正在装入 junit\framework\Assert.class(junit\framework:Assert.class)]
[正在检查 chess.AllTests]
[正在装入 e:\practice\chess\pieces\PawnTest.class]
[正在装入 java\lang\Class.class(java\lang:Class.class)]
[已写入 chess\AllTests.class]
[正在检查 chess.Board]
[正在装入 java\util\Collection.class(java\util:Collection.class)]
[正在装入 java\util\AbstractList.class(java\util:AbstractList.class)]
[正在装入 java\util\AbstractCollection.class(java\util:AbstractCollection.class)
]
[已写入 chess\Board.class]
[正在检查 chess.BoardTest]
[正在装入 java\lang\String.class(java\lang:String.class)]
[已写入 chess\BoardTest.class]
[总时间 484ms]
E:\practice>cd chess
E:\practice\chess>javac -verbose -classpath e:\practice;e:\junit4.8.2\junit-4.8.
2.jar *.java
[解析开始时间 AllTests.java]
[解析已完成时间 31ms]
[解析开始时间 Board.java]
[解析已完成时间 0ms]
[解析开始时间 BoardTest.java]
[解析已完成时间 0ms]
[源文件的搜索路径: e:\practice,e:\junit4.8.2\junit-4.8.2.jar]
[类文件的搜索路径: E:\Program Files\Java\jdk1.6.0_10\jre\lib\resources.jar,E:\P
rogram Files\Java\jdk1.6.0_10\jre\lib\rt.jar,E:\Program Files\Java\jdk1.6.0_10\j
re\lib\sunrsasign.jar,E:\Program Files\Java\jdk1.6.0_10\jre\lib\jsse.jar,E:\Prog
ram Files\Java\jdk1.6.0_10\jre\lib\jce.jar,E:\Program Files\Java\jdk1.6.0_10\jre
\lib\charsets.jar,E:\Program Files\Java\jdk1.6.0_10\jre\classes,E:\Program Files
\Java\jdk1.6.0_10\jre\lib\ext\dnsns.jar,E:\Program Files\Java\jdk1.6.0_10\jre\li
b\ext\sunjce_provider.jar,E:\Program Files\Java\jdk1.6.0_10\jre\lib\ext\sunmscap
i.jar,E:\Program Files\Java\jdk1.6.0_10\jre\lib\ext\sunpkcs11.jar,E:\Program Fil
es\Java\jdk1.6.0_10\jre\lib\ext\localedata.jar,e:\practice,e:\junit4.8.2\junit-4
.8.2.jar]
[正在装入 java\lang\Object.class(java\lang:Object.class)]
[正在装入 junit\framework\TestSuite.class(junit\framework:TestSuite.class)]
[正在装入 java\util\ArrayList.class(java\util:ArrayList.class)]
[正在装入 e:\practice\chess\pieces\Pawn.class]
[正在装入 junit\framework\TestCase.class(junit\framework:TestCase.class)]
[正在装入 junit\framework\Test.class(junit\framework:Test.class)]
[正在装入 junit\framework\Assert.class(junit\framework:Assert.class)]
[正在检查 chess.AllTests]
[正在装入 e:\practice\chess\pieces\PawnTest.class]
[正在装入 java\lang\Class.class(java\lang:Class.class)]
[已写入 AllTests.class]
[正在检查 chess.Board]
[正在装入 java\util\Collection.class(java\util:Collection.class)]
[正在装入 java\util\AbstractList.class(java\util:AbstractList.class)]
[正在装入 java\util\AbstractCollection.class(java\util:AbstractCollection.class)
]
[已写入 Board.class]
[正在检查 chess.BoardTest]
[正在装入 java\lang\String.class(java\lang:String.class)]
[已写入 BoardTest.class]
[总时间 485ms]
E:\practice\chess>javac -verbose -classpath e:\junit4.8.2\junit-4.8.2.jar *.java
[解析开始时间 AllTests.java]
[解析已完成时间 31ms]
[解析开始时间 Board.java]
[解析已完成时间 0ms]
[解析开始时间 BoardTest.java]
[解析已完成时间 0ms]
[源文件的搜索路径: e:\junit4.8.2\junit-4.8.2.jar]
[类文件的搜索路径: E:\Program Files\Java\jdk1.6.0_10\jre\lib\resources.jar,E:\P
rogram Files\Java\jdk1.6.0_10\jre\lib\rt.jar,E:\Program Files\Java\jdk1.6.0_10\j
re\lib\sunrsasign.jar,E:\Program Files\Java\jdk1.6.0_10\jre\lib\jsse.jar,E:\Prog
ram Files\Java\jdk1.6.0_10\jre\lib\jce.jar,E:\Program Files\Java\jdk1.6.0_10\jre
\lib\charsets.jar,E:\Program Files\Java\jdk1.6.0_10\jre\classes,E:\Program Files
\Java\jdk1.6.0_10\jre\lib\ext\dnsns.jar,E:\Program Files\Java\jdk1.6.0_10\jre\li
b\ext\sunjce_provider.jar,E:\Program Files\Java\jdk1.6.0_10\jre\lib\ext\sunmscap
i.jar,E:\Program Files\Java\jdk1.6.0_10\jre\lib\ext\sunpkcs11.jar,E:\Program Fil
es\Java\jdk1.6.0_10\jre\lib\ext\localedata.jar,e:\junit4.8.2\junit-4.8.2.jar]
AllTests.java:2: 软件包 chess.pieces 不存在
import chess.pieces.*;
^
[正在装入 java\lang\Object.class(java\lang:Object.class)]
[正在装入 junit\framework\TestSuite.class(junit\framework:TestSuite.class)]
Board.java:3: 软件包 chess.pieces 不存在
import chess.pieces.*;
^
[正在装入 java\util\ArrayList.class(java\util:ArrayList.class)]
Board.java:8: 找不到符号
符号: 类 Pawn
位置: 类 chess.Board
private ArrayList<Pawn> allPawns=new ArrayList<Pawn>();
^
Board.java:17: 找不到符号
符号: 类 Pawn
位置: 类 chess.Board
public void addPawn(Pawn pawn){
^
Board.java:20: 找不到符号
符号: 类 Pawn
位置: 类 chess.Board
public Pawn getPawn(int index){
^
BoardTest.java:3: 软件包 chess.pieces 不存在
import chess.pieces.*;
^
[正在装入 junit\framework\TestCase.class(junit\framework:TestCase.class)]
[正在装入 junit\framework\Test.class(junit\framework:Test.class)]
[正在装入 junit\framework\Assert.class(junit\framework:Assert.class)]
[正在检查 chess.AllTests]
AllTests.java:7: 找不到符号
符号: 类 PawnTest
位置: 类 chess.AllTests
suite.addTestSuite(PawnTest.class);
^
[正在装入 java\lang\Class.class(java\lang:Class.class)]
[正在检查 chess.Board]
Board.java:8: 找不到符号
符号: 类 Pawn
位置: 类 chess.Board
private ArrayList<Pawn> allPawns=new ArrayList<Pawn>();
^
[正在装入 java\util\Collection.class(java\util:Collection.class)]
[正在装入 java\util\AbstractList.class(java\util:AbstractList.class)]
[正在装入 java\util\AbstractCollection.class(java\util:AbstractCollection.class)
]
[正在检查 chess.BoardTest]
[正在装入 java\lang\String.class(java\lang:String.class)]
BoardTest.java:10: 找不到符号
符号: 类 Pawn
位置: 类 chess.BoardTest
Pawn firstPawn=new Pawn();
^
BoardTest.java:10: 找不到符号
符号: 类 Pawn
位置: 类 chess.BoardTest
Pawn firstPawn=new Pawn();
^
BoardTest.java:14: 找不到符号
符号: 类 Pawn
位置: 类 chess.BoardTest
Pawn secondPawn=new Pawn(black);
^
BoardTest.java:14: 找不到符号
符号: 类 Pawn
位置: 类 chess.BoardTest
Pawn secondPawn=new Pawn(black);
^
[总时间 485ms]
12 错误
E:\practice\chess>javac -verbose -classpath .;e:\junit4.8.2\junit-4.8.2.jar *.ja
va
[解析开始时间 AllTests.java]
[解析已完成时间 31ms]
[解析开始时间 Board.java]
[解析已完成时间 0ms]
[解析开始时间 BoardTest.java]
[解析已完成时间 16ms]
[源文件的搜索路径: .,e:\junit4.8.2\junit-4.8.2.jar]
[类文件的搜索路径: E:\Program Files\Java\jdk1.6.0_10\jre\lib\resources.jar,E:\P
rogram Files\Java\jdk1.6.0_10\jre\lib\rt.jar,E:\Program Files\Java\jdk1.6.0_10\j
re\lib\sunrsasign.jar,E:\Program Files\Java\jdk1.6.0_10\jre\lib\jsse.jar,E:\Prog
ram Files\Java\jdk1.6.0_10\jre\lib\jce.jar,E:\Program Files\Java\jdk1.6.0_10\jre
\lib\charsets.jar,E:\Program Files\Java\jdk1.6.0_10\jre\classes,E:\Program Files
\Java\jdk1.6.0_10\jre\lib\ext\dnsns.jar,E:\Program Files\Java\jdk1.6.0_10\jre\li
b\ext\sunjce_provider.jar,E:\Program Files\Java\jdk1.6.0_10\jre\lib\ext\sunmscap
i.jar,E:\Program Files\Java\jdk1.6.0_10\jre\lib\ext\sunpkcs11.jar,E:\Program Fil
es\Java\jdk1.6.0_10\jre\lib\ext\localedata.jar,.,e:\junit4.8.2\junit-4.8.2.jar]
[正在装入 java\lang\Object.class(java\lang:Object.class)]
[正在装入 junit\framework\TestSuite.class(junit\framework:TestSuite.class)]
[正在装入 java\util\ArrayList.class(java\util:ArrayList.class)]
[正在装入 .\chess\pieces\Pawn.class]
[正在装入 junit\framework\TestCase.class(junit\framework:TestCase.class)]
[正在装入 junit\framework\Test.class(junit\framework:Test.class)]
[正在装入 junit\framework\Assert.class(junit\framework:Assert.class)]
[正在检查 chess.AllTests]
[正在装入 .\chess\pieces\PawnTest.class]
[正在装入 java\lang\Class.class(java\lang:Class.class)]
[已写入 AllTests.class]
[正在检查 chess.Board]
[正在装入 java\util\Collection.class(java\util:Collection.class)]
[正在装入 java\util\AbstractList.class(java\util:AbstractList.class)]
[正在装入 java\util\AbstractCollection.class(java\util:AbstractCollection.class)
]
[已写入 Board.class]
[正在检查 chess.BoardTest]
[正在装入 java\lang\String.class(java\lang:String.class)]
[已写入 BoardTest.class]
[总时间 485ms]
E:\>javac -verbose -classpath e:\practice;e:\junit4.8.2\junit-4.8.2.jar e:\pract
ice\chess\*.java
[解析开始时间 e:\practice\chess\AllTests.java]
[解析已完成时间 31ms]
[解析开始时间 e:\practice\chess\Board.java]
[解析已完成时间 0ms]
[解析开始时间 e:\practice\chess\BoardTest.java]
[解析已完成时间 0ms]
[源文件的搜索路径: e:\practice,e:\junit4.8.2\junit-4.8.2.jar]
[类文件的搜索路径: E:\Program Files\Java\jdk1.6.0_10\jre\lib\resources.jar,E:\P
rogram Files\Java\jdk1.6.0_10\jre\lib\rt.jar,E:\Program Files\Java\jdk1.6.0_10\j
re\lib\sunrsasign.jar,E:\Program Files\Java\jdk1.6.0_10\jre\lib\jsse.jar,E:\Prog
ram Files\Java\jdk1.6.0_10\jre\lib\jce.jar,E:\Program Files\Java\jdk1.6.0_10\jre
\lib\charsets.jar,E:\Program Files\Java\jdk1.6.0_10\jre\classes,E:\Program Files
\Java\jdk1.6.0_10\jre\lib\ext\dnsns.jar,E:\Program Files\Java\jdk1.6.0_10\jre\li
b\ext\sunjce_provider.jar,E:\Program Files\Java\jdk1.6.0_10\jre\lib\ext\sunmscap
i.jar,E:\Program Files\Java\jdk1.6.0_10\jre\lib\ext\sunpkcs11.jar,E:\Program Fil
es\Java\jdk1.6.0_10\jre\lib\ext\localedata.jar,e:\practice,e:\junit4.8.2\junit-4
.8.2.jar]
[正在装入 java\lang\Object.class(java\lang:Object.class)]
[正在装入 junit\framework\TestSuite.class(junit\framework:TestSuite.class)]
[正在装入 java\util\ArrayList.class(java\util:ArrayList.class)]
[正在装入 e:\practice\chess\pieces\Pawn.class]
[正在装入 junit\framework\TestCase.class(junit\framework:TestCase.class)]
[正在装入 junit\framework\Test.class(junit\framework:Test.class)]
[正在装入 junit\framework\Assert.class(junit\framework:Assert.class)]
[正在检查 chess.AllTests]
[正在装入 e:\practice\chess\pieces\PawnTest.class]
[正在装入 java\lang\Class.class(java\lang:Class.class)]
[已写入 e:\practice\chess\AllTests.class]
[正在检查 chess.Board]
[正在装入 java\util\Collection.class(java\util:Collection.class)]
[正在装入 java\util\AbstractList.class(java\util:AbstractList.class)]
[正在装入 java\util\AbstractCollection.class(java\util:AbstractCollection.class)
]
[已写入 e:\practice\chess\Board.class]
[正在检查 chess.BoardTest]
[正在装入 java\lang\String.class(java\lang:String.class)]
[已写入 e:\practice\chess\BoardTest.class]
[总时间 593ms]
compileJava 指定classPath javac -classpath用法
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Artemis 命令用法
Artemis高级用法
读取文件 shell脚本 批量删除 mq artemis -
Springboot验证框架长度
前言 最近工作,毕业设计都忙疯了,辞了工作现在终于有空余时间可以继续总结了 Spring数据校验 Spring有自己的校验框架,同时也支持JSR 303 的校验,这里主要介绍Spring使用JS
Springboot验证框架长度 字段 正则表达式 Max