ubuntu命令行下java工程編輯與算法(第四版)環境配置

ubuntu命令行下java工程編輯與算法(第四版)環境配置

在學習算法(第四版)中的實例時,因須要安裝配套的java編譯環境,但是在編譯java文件的時候老是出各類錯誤,特在此總結一下。html

ubuntu下java環境配置

因爲網上教程比較多,並且也較全面,特此擺放一個連接,跟着此教程總就能夠配置好oracle的java jdk,若是想更加省事,直接在命令行下鍵入java,會提示安裝各類開源java jdk,只須要一個命令便可:java

  1. sudo apt-get install xxxx //對應java版本 

algorithms(第四版)相對應的資料下載

相對應的算法jar包
相對應的算法數據
對應的github,熟悉java的人,能夠經過eclipse或idea進行maven和gradle代碼配置
算法這門課的配置流程git

測試安裝環境

跟着官方教程走,環境搭建通常沒有問題,測試成功的一個實例github

  1. forest@forest-E351:~/java/code$ javac -d . RandomSeq 
  2. forest@forest-E351:~/java/code$ java edu.princeton.cs.algs4.RandomSeq 5 100.0 200.0 
  3. //運行須要指定包名,不然沒法運行,老是指出少主類 
  4. 168.00 
  5. 110.52 
  6. 152.05 
  7. 127.17 
  8. 127.25 

javac 與 java命令

  • javac
    javac用於編譯java源文件,生成.class文件
    語法:javac [option] source
    經常使用的[option]選項:
    A、-classpath <路徑>(-cp縮寫):指定要使用的類路徑或要使用的jar包的路徑(jar文件、zip文件(裏面都是錯啦搜索文件)),使用後
    會覆蓋CLASSPATH的設定
    B、-d <路徑> :指定源文件編譯後生成.class文件的存放位置
  • java
    java用於運行javac編譯後生成的.class文件
    語法:java [option] classname [arguments]
    經常使用的[option]選項:
    A、-classpath <路徑>(-cp縮寫):指定要使用的類路徑或要使用的jar包的路徑(jar文件、zip文件(裏面都是錯啦搜索文件)),使用後
    會覆蓋CLASSPATH的設定
    B、[arguments]:傳遞給main函數的參數
  • 用一個簡單實例來闡述上面的使用方法
    類TestT引用類T,其代碼分別以下:
  1. package a.b; //所在目錄/src/java/code/a/b 
  2. import c.d.T;  
  3. public class TestT {  
  4. public static void main(String[] args) {  
  5. T t = new T();  
  6. t.p();  
  7. }  
  8. }  
  9. package c.d;   //所在目錄/src/java/code/tmp/c/d/ 
  10. public class T {  
  11. public void p(){  
  12. System.out.println("class:T");  
  13. }  
  14. }  

輸入javac編譯和java執行命令以後web

  1. //命令輸入錢各個文件所在位置 
  2. forest@forest-E351:~/java/code$ tree 

  3. ├── a 
  4. │   └── b 
  5. │   └── TestT.java 
  6. └── tmp 
  7. └── c 
  8. └── d 
  9. └── T.java 
  10. forest@forest-E351:~/java/code/a/b$ javac -classpath ../../tmp TestT.java  
  11. forest@forest-E351:~/java/code$ tree 

  12. ├── a 
  13. │   └── b 
  14. │   ├── TestT.class    //相對應的字節碼生成 
  15. │   └── TestT.java 
  16. └── tmp 
  17. └── c 
  18. └── d 
  19. ├── T.class     //相對應的字節碼 
  20. └── T.java 
  21. forest@forest-E351:~/java/code$ java -cp .:tmp a/b/TestT   
  22. //.本地文件夾,表示TestT字節碼;tmp用於尋找T字節碼;包也是表明目錄,tmp不須要詳細寫成tmp/c/d 
  23. // a/b/TestT用於指定主函數程序 
  24. class:T //程序運行結果 

從shell腳原本查看java和javac的使用

通常,一個工程下面都會有lib(引入的必要jar包),classes(保存.class文件),src(.java源代碼)三個文件夾。
java文件夾的目錄結構以下,文件之間的關係是Client.java調用了DemoService.java的方法;ServerImpl.java調用了DemoService.java的方法;Server.java調用了ServerImpl.java和DemoService.java的方法;算法

編譯前的結構圖:
enter description here
make.sh 編譯腳本shell

  1.  
  2. #!/bin/bash  
  3.  
  4. # Get current position  
  5. TOP_DIR=$(pwd)  
  6.  
  7. # Add all necessary jars  
  8. LIBPATH=lib/commons-codec-1.6.jar:lib/commons-logging-1.1.1.jar\ 
  9. :lib/httpclient-4.2.5.jar:lib/httpcore-4.2.4.jar\ 
  10. :lib/junit-4.4.jar:lib/libthrift-1.0.0.jar:lib/log4j-1.2.14.jar\ 
  11. :lib/servlet-api-2.5.jar:lib/slf4j-api-1.5.8.jar:lib/slf4j-log4j12-1.5.8.jar  
  12.  
  13. #compile java file  
  14. # 編譯生成的字節碼放入本地目錄下classes目錄下 
  15. # $LIBPATH 表示DemoService.java所引用的jar包 
  16. #src/com/demo/DemoService.java 根據當前sh腳本所在目錄找到所須要編譯的程序 
  17. javac -cp $LIBPATH src/com/demo/DemoService.java -d ./classes/.  
  18. javac -cp $TOP_DIR/classes:$LIBPATH src/com/server/ServerImpl.java -d ./classes/.  
  19. javac -cp $TOP_DIR/classes:$LIBPATH src/com/server/Server.java -d ./classes/.  
  20. javac -cp $TOP_DIR/classes:$LIBPATH src/com/client/Client.java -d ./classes/. 

run.sh運行腳本ubuntu

  1.  
  2. #!/bin/bash  
  3.  
  4. #Get client/server  
  5. SIDE=$1  
  6.  
  7. # Get current position  
  8. TOP_DIR=$(pwd)  
  9.  
  10. # Add all necessary jars  
  11. LIBPATH=lib/commons-codec-1.6.jar:lib/commons-logging-1.1.1.jar\ 
  12. :lib/httpclient-4.2.5.jar:lib/httpcore-4.2.4.jar\ 
  13. :lib/junit-4.4.jar:lib/libthrift-1.0.0.jar\ 
  14. :lib/log4j-1.2.14.jar:lib/servlet-api-2.5.jar\ 
  15. :lib/slf4j-api-1.5.8.jar:lib/slf4j-log4j12-1.5.8.jar  
  16.  
  17. #run program  
  18. # 因爲所引用的類的字節碼都放在一個classes目錄下,咱們只須要引入一個目錄便可 
  19. # $LIBPATH 引入本程序所須要的jar包 
  20. if [ $SIDE == "server" ];then  
  21. java -cp $TOP_DIR/classes:$LIBPATH com/server/Server  
  22. else  
  23. java -cp $TOP_DIR/classes:$LIBPATH com/client/Client  
  24. fi  

編譯後的結構圖:
enter description hereapi

相關文章
相關標籤/搜索