2015-02-10 65 views
1

我正在嘗試編寫一個腳本,它將自動執行我經常執行的一些任務。我的文件夾結構如下所示:Bash編譯Java類和JAR

./ 
sampleScript.sh 
src/SampleProgram.java 

除此之外,我的Java程序依賴於ojdbc6.jar文件,該文件駐留在~/sampleFolder/lib

我試圖編譯並在我的腳本運行Java程序,像這樣:

javac -cp "$CLASSPATH:~/sampleFolder/lib/ojdbc6.jar:./src" src/SampleProgram.java 
java -cp "$CLASSPATH:~/sampleFolder/lib/ojdbc6.jar:./src" SampleProgram 

不幸的是,這是行不通的。它似乎在我的程序中檢查ojdbc6.jar依賴關係的步驟中失敗。基於這個文件夾結構分配我的-cp的正確方法是什麼?

回答

5

你必須保持~外報價,使外殼可以展開:

javac -cp "$CLASSPATH":~/sampleFolder/lib/ojdbc6.jar:./src src/SampleProgram.java 
java -cp "$CLASSPATH":~/sampleFolder/lib/ojdbc6.jar:./src SampleProgram 
+0

我也想你的建議,但我的計劃似乎仍然在這一步失敗:'{嘗試調用Class.forName (「甲骨文.jdbc.driver.OracleDriver「); catch(ClassNotFoundException e){ e.printStackTrace(); }'帶有'java.lang.ClassNotFoundException oracle.jdbc.driver.OracleDriver'的消息' – raphnguyen 2015-02-10 19:14:25

+0

這應該起作用。你現在沒有在'javac'中得到任何錯誤嗎?你也可以嘗試給完整路徑的jar文件,如:'java -cp「$ C​​LASSPATH」:/ home/user/sampleFolder/lib/ojdbc6.jar:./ src SampleProgram' – anubhava 2015-02-10 19:18:08

+1

我建議' 〜'由於許多原因,其中最重要的是它擴大了引號。 – 2015-02-10 19:23:57