ZT: https://blog.csdn.net/just3do/article/details/68957618java
有時候寫個小測試,不想開idea,就用cmder,可是老忘記怎麼編譯,就copy別人的一份博客。python
javac和java命令行中的-classpath選項linux
這是個很基礎的問題,可是由於基本上都是用現有的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
sql
/usr/local/java/bin/java -classpath /tmp/javatest/lib/mail-1.3.3.jar:/tmp/javatest/bin/ jp.co.realseed.Capabilityapache
-----------------------------------------------------------------windows
今天寫了個測試程序,帶有包名,居然忘記了怎麼編譯和運行,因此如今記下來ide
1 帶包程序的編譯與運行工具
程序中帶有包名,編譯應該使用oop
這裏在當前目錄會生成一個 test目錄,裏面就是 HiveJdbcClient.class 文件測試
運行的時候命令:
運行結果:
2 對於須要依賴其餘jar的運行
在實際的運行中,可能須要依賴額外的jar包,那麼javac 和 Java 應該怎麼作呢
使用 java -cp 指定依賴的jar包就能夠。例子以下:
HiveJdbcClient.java
裏面的代碼裏,咱們依賴了Hive的jdbc jar 包,在編譯和運行時咱們也要加上依賴的jar包,須要注意的是,使用 java -cp 有額外的jar的時候:在Linux下面ClassPath前面是一個點號加一個冒號;在Windows下面ClassPath前面是一個點號加一個分號
運行命令:
這樣就能夠了
若是咱們把代碼中的 package 註釋打開(該文件又多了一個包)
那麼,編譯時使用:
運行命令:
這樣就能夠了
-d .(點) :表明的是把class 文件打到哪一個目錄裏