JAVA和JAVAC 命令
javac和java命令行中的-classpath選項
這是個很基礎的問題,但是因為基本上都是用現有的IDE工具來開發java程序,所以很少有人意識到這一點。
javac
-classpath,設定要搜索類的路徑,可以是目錄,jar文件,zip文件(裡面都是class文件),會覆蓋掉所有在CLASSPATH裡面的設定。
-sourcepath, 設定要搜索編譯所需java 文件的路徑,可以是目錄,jar文件,zip文件(裡面都是java文件)。
所以一個完整的javac命令行應該是這樣的,
假設abc.java在路徑c:/src裡面,在任何的目錄的都可以執行以下命令來編譯。
javac -classpath c:/classes;c:/jar/abc.jar;c:/zip/abc.zip -sourcepath c:/source/project1/src;c:/source/project2 /lib/src.jar;c:/source/project3/lib/src.zip c:/src/abc.java
表示編譯需要c:/classed下面的class文件,c:/jar/abc.jar裡面的class文件,c:/zip/abc.zip裡面的class文件還需要c:/source/project1/src下面的源文件,c:/source/project2 /lib/src.jar裡面的源文件,c:/source/project3/lib/src.zip裡面的源文件,
注意:jar,zip裡面的源文件不會有什麼改動,目錄下的源文件,有可能會被重新編譯。
java
-classpath, 設定要搜索的類的路徑,可以是目錄,jar文件,zip文件(裡面都是class文件),會覆蓋掉所有的CLASSPATH的設定。
由於所要執行的類也是要搜索的類的一部分,所以一定要把這個類的路徑也放到-classpath的設置裡面。
表現在,在要執行的類的路徑裡面執行java時,一定要添加上點號(.)標示本目錄也要搜索。
假設abc.class在路徑c:/src裡面
可以在任何路徑下執行以下命令
java -classpath c:/classes;c:/jar/abc.jar;c:/zip/abc.zip;c:/src abc
問題:如果main.class屬於c:/jar/abc.jar,並且在com.cnblogs.jeffchen這個包裡,那麼執行java -classpath c:/classes;c:/jar/abc.jar;c:/zip/abc.zip;com.cnblogs.jeffchen.main即可, 但是如果classpath中包含多個jar包呢?並且其他jar包中也有com.cnblogs.jeffchen會發生什麼情況?錯誤?
在windows下,
文件路徑的分割符為反斜杠/
類或者java文件列表的分割符為分號;
在linux下文件路徑的分隔符位斜杠/
類或者java文件列表的分隔符為冒號:
一個linux下編譯和運行的例子
/usr/local/java/bin/javac -classpath /tmp/javatest/lib/mail-1.3.3.jar -d /tmp/javatest/bin/ /tmp/javatest/src/jp/co/realseed/Capability.java/usr/local/java/bin/java -classpath /tmp/javatest/lib/mail-1.3.3.jar:/tmp/javatest/bin/ jp.co.realseed.Capability
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!