ubuntu命令行下java工程編輯與算法(第四版)環境配置
在學習算法(第四版)中的實例時,因須要安裝配套的java編譯環境,但是在編譯java文件的時候老是出各類錯誤,特在此總結一下。html
ubuntu下java環境配置
因爲網上教程比較多,並且也較全面,特此擺放一個連接,跟着此教程總就能夠配置好oracle的java jdk,若是想更加省事,直接在命令行下鍵入java,會提示安裝各類開源java jdk,只須要一個命令便可:java
- sudo apt-get install xxxx //對應java版本
algorithms(第四版)相對應的資料下載
相對應的算法jar包
相對應的算法數據
對應的github,熟悉java的人,能夠經過eclipse或idea進行maven和gradle代碼配置
算法這門課的配置流程git
測試安裝環境
跟着官方教程走,環境搭建通常沒有問題,測試成功的一個實例github
- forest@forest-E351:~/java/code$ javac -d . RandomSeq
- forest@forest-E351:~/java/code$ java edu.princeton.cs.algs4.RandomSeq 5 100.0 200.0
- //運行須要指定包名,不然沒法運行,老是指出少主類
- 168.00
- 110.52
- 152.05
- 127.17
- 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,其代碼分別以下:
- package a.b;
- import c.d.T;
- public class TestT {
- public static void main(String[] args) {
- T t = new T();
- t.p();
- }
- }
- package c.d;
- public class T {
- public void p(){
- System.out.println("class:T");
- }
- }
輸入javac編譯和java執行命令以後web
- //命令輸入錢各個文件所在位置
- forest@forest-E351:~/java/code$ tree
- .
- ├── a
- │ └── b
- │ └── TestT.java
- └── tmp
- └── c
- └── d
- └── T.java
- forest@forest-E351:~/java/code/a/b$ javac -classpath ../../tmp TestT.java
- forest@forest-E351:~/java/code$ tree
- .
- ├── a
- │ └── b
- │ ├── TestT.class //相對應的字節碼生成
- │ └── TestT.java
- └── tmp
- └── c
- └── d
- ├── T.class //相對應的字節碼
- └── T.java
- forest@forest-E351:~/java/code$ java -cp .:tmp a/b/TestT
- //.本地文件夾,表示TestT字節碼;tmp用於尋找T字節碼;包也是表明目錄,tmp不須要詳細寫成tmp/c/d
- // a/b/TestT用於指定主函數程序
- 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的方法;算法
編譯前的結構圖:

make.sh 編譯腳本shell
-
-
-
-
- TOP_DIR=$(pwd)
-
-
- LIBPATH=lib/commons-codec-1.6.jar:lib/commons-logging-1.1.1.jar\
- :lib/httpclient-4.2.5.jar:lib/httpcore-4.2.4.jar\
- :lib/junit-4.4.jar:lib/libthrift-1.0.0.jar:lib/log4j-1.2.14.jar\
- :lib/servlet-api-2.5.jar:lib/slf4j-api-1.5.8.jar:lib/slf4j-log4j12-1.5.8.jar
-
-
-
-
-
- javac -cp $LIBPATH src/com/demo/DemoService.java -d ./classes/.
- javac -cp $TOP_DIR/classes:$LIBPATH src/com/server/ServerImpl.java -d ./classes/.
- javac -cp $TOP_DIR/classes:$LIBPATH src/com/server/Server.java -d ./classes/.
- javac -cp $TOP_DIR/classes:$LIBPATH src/com/client/Client.java -d ./classes/.
run.sh運行腳本ubuntu
-
-
-
-
- SIDE=$1
-
-
- TOP_DIR=$(pwd)
-
-
- LIBPATH=lib/commons-codec-1.6.jar:lib/commons-logging-1.1.1.jar\
- :lib/httpclient-4.2.5.jar:lib/httpcore-4.2.4.jar\
- :lib/junit-4.4.jar:lib/libthrift-1.0.0.jar\
- :lib/log4j-1.2.14.jar:lib/servlet-api-2.5.jar\
- :lib/slf4j-api-1.5.8.jar:lib/slf4j-log4j12-1.5.8.jar
-
-
-
-
- if [ $SIDE == "server" ];then
- java -cp $TOP_DIR/classes:$LIBPATH com/server/Server
- else
- java -cp $TOP_DIR/classes:$LIBPATH com/client/Client
- fi
編譯後的結構圖:
api