目錄:html
一. javac編譯java
1. 沒有額外的jar包linux
2. 包含額外的jar包json
2、 jar打jar包bash
3、 java運行eclipse
1. java命令執行spa
2. jar包執行.net
4、 腳本完成編譯執行命令行
整個過程模擬Eclipse的Java Project項目,包括src,以及生成的.class文件在bin中,還可能有lib,包含額外的jar包。3d
一. javac編譯
1. 沒有額外的jar包
i)咱們新建JavaProject,該項目結構以下:
bin:必須新建一個空的bin文件,用於存放生成.class文件 src:源碼文件,包含咱們寫的.java文件 src/com/zc/javaproject/test/HelloJava.java src/com/zc/javaproject/test1/HelloWorld.java
命令行運行:(在JavaProject目錄下)
# -d 指定.class的生成目錄 javac -d bin ./src/com/zc/javaproject/test/*.java ./src/com/zc/javaproject/test1/*.java # -classpath # 使用了-classpath,使得編譯器在尋找HelloWorld類的時候以bin爲根目錄,根據根目錄和package名,類名最終定位了須要用的(已編譯出來的)HelloWorld類。 javac -d bin -classpath bin ./src/com/zc/javaproject/test/*.java ./src/com/zc/javaproject/test1/*.java # -sourcepath # 在編譯條件裏面加入-verbose能夠很清楚的看到,編譯器在尋找HelloWorld類的時候,以src爲根目錄,根據根目錄和package名,類名最終定位了須要用的(源代碼)HelloWorld類。 javac -d bin -sourcepath src ./src/com/zc/javaproject/test/*.java ./src/com/zc/javaproject/test1/*.java # javac -d bin -sourcepath src -classpath bin ./src/com/zc/javaproject/test/*.java ./src/com/zc/javaproject/test1/*.java
結果:bin中生成和src目錄相對應的.class文件,相似eclipse中的bin。
bin/com/zc/javaproject/test/HelloJava.class bin/com/zc/javaproject/test1/HelloWorld.class
ii)咱們新建JavaProject,該項目結構以下:
假設你的這個包放在src文件夾下,src的父目錄爲JavaProject,sourcelist.txt也事先新建在JavaProject文件夾下。首先將這個包中你須要編譯的java文件相對於src的路徑註冊到sourcelist.txt文件中;接着在project文件夾中新建一個bin文件夾
bin:必須新建一個空的bin文件,用於存放生成.class文件 src:源碼文件,包含咱們寫的.java文件 sourcelist.txt:編譯單位其實就是單個的java文件,爲了達到同時編譯多個java文件的目的,能夠將所需編譯的java文件路徑保存在一個txt中,好比sourcelist.txt,以換行爲分隔符(這個過程稱爲類文件註冊)。
src/com/zc/javaproject/test/HelloJava.java src/com/zc/javaproject/test1/HelloWorld.java
sourcelist.txt內容以下:(必須指定具體的java)
./src/com/zc/javaproject/test/HelloJava.java ./src/com/zc/javaproject/test1/HelloWorld.java
命令行運行:(在JavaProject目錄下)
javac -d bin -sourcepath src -classpath bin @sourcelist.txt
結果:bin中生成和src目錄相對應的.class文件,相似eclipse中的bin。
bin/com/zc/javaproject/test/HelloJava.class bin/com/zc/javaproject/test1/HelloWorld.class
2. 包含額外的jar包
咱們新建Class2Json,該項目結構以下:
假設你的這個包放在src文件夾下,src的父目錄爲Class2Json,sourcelist.txt也事先新建在Class2Json文件夾下。首先將這個包中你須要編譯的java文件相對於src的路徑註冊到sourcelist.txt文件中;接着在project文件夾中新建一個bin文件夾 bin:必須新建一個空的bin文件,用於存放生成.class文件 lib:包含須要的額外的jar包 src:源碼文件,包含咱們寫的.java文件 sourcelist.txt:編譯單位其實就是單個的java文件,爲了達到同時編譯多個java文件的目的,能夠將所需編譯的java文件路徑保存在一個txt中,好比sourcelist.txt,以換行爲分隔符(這個過程稱爲類文件註冊)。 src/com/zc/class2json/trans/main/DataClass2Json.java
src/com/zc/class2json/trans/test/TestDataClass2Json.java src/com/zc/dataclass/main/PersonData.java
lib中jar包:
sourcelist.txt內容以下:(必須指定具體的java)
./src/com/zc/class2json/trans/main/DataClass2Json.java ./src/com/zc/class2json/trans/test/TestDataClass2Json.java ./src/com/zc/dataclass/main/PersonData.java
命令行運行:(在Class2Json文件下) linux下用冒號:分隔開,Windows下用分號;隔開。參考 https://blog.csdn.net/myfmyfmyfmyf/article/details/53179395
javac -d bin -sourcepath src -classpath .:lib/commons-beanutils-1.8.0.jar:lib/commons-collections-3.2.1.jar:lib/commons-lang-2.4.jar:lib/commons-logging-1.1.3.jar:lib/ezmorph-1.0.6.jar:lib/json-lib-2.3-jdk15.jar @sourcelist.txt
javac -d bin -sourcepath src -classpath .:bin:lib/commons-beanutils-1.8.0.jar:lib/commons-collections-3.2.1.jar:lib/commons-lang-2.4.jar:lib/commons-logging-1.1.3.jar:lib/ezmorph-1.0.6.jar:lib/json-lib-2.3-jdk15.jar @sourcelist.txt
或者
lib=.:bin:lib/commons-beanutils-1.8.0.jar:lib/commons-collections-3.2.1.jar:lib/commons-lang-2.4.jar:lib/commons-logging-1.1.3.jar:lib/ezmorph-1.0.6.jar:lib/json-lib-2.3-jdk15.jar
javac -d bin -sourcepath src -classpath $lib @sourcelist.txt
結果:bin中生成和src目錄相對應的.class文件,相似eclipse中的bin。
./bin/com/zc/class2json/trans/main/DataClass2Json.class ./bin/com/zc/class2json/trans/test/TestDataClass2Json.class ./bin/com/zc/dataclass/main/PersonData.class
2、 jar打jar包
參考個人博客 jar命令打jar包
3、 java運行
1. java命令執行
1)對於 JavaProject項目
對於第一個不含jar包的項目,在JavaProject目錄下:
// java -cp/-classpath 相對/絕對路徑 類
java -cp bin com.zc.javaproject.test.HelloJava java -classpath bin com.zc.javaproject.test.HelloJava
java -cp bin com/zc/javaproject/test/HelloJava
java -classpath bin com/zc/javaproject/test/HelloJava
執行結果以下:
2)對與Class2Json項目
對於含jar包的項目,在Class2Json目錄下: 使用java命令的-classpath或-cp選項,或設置CLASSPATH
java -cp .:bin:lib/commons-beanutils-1.8.0.jar:lib/commons-collections-3.2.1.jar:lib/commons-lang-2.4.jar:lib/commons-logging-1.1.3.jar:lib/ezmorph-1.0.6.jar:lib/json-lib-2.3-jdk15.jar com.zc.class2json.trans.test.TestDataClass2Json
java -cp .:bin:lib/commons-beanutils-1.8.0.jar:lib/commons-collections-3.2.1.jar:lib/commons-lang-2.4.jar:lib/commons-logging-1.1.3.jar:lib/ezmorph-1.0.6.jar:lib/json-lib-2.3-jdk15.jar com/zc/class2json/trans/test/TestDataClass2Json
或者
lib=.:bin:lib/commons-beanutils-1.8.0.jar:lib/commons-collections-3.2.1.jar:lib/commons-lang-2.4.jar:lib/commons-logging-1.1.3.jar:lib/ezmorph-1.0.6.jar:lib/json-lib-2.3-jdk15.jar
java -cp $lib com.zc.class2json.trans.test.TestDataClass2Json
執行結果以下:
2. jar包執行
由於META-INF/MANIFEST.MF指明瞭jar包以及主類:
java -jar Class2Json.jar
4、 腳本完成編譯執行
在Class2Json目錄下:
bin:空的 lib:須要額外的jar包 src:源碼 class2json.sh:執行腳本 sourcelist.txt:
sourcelist.txt內容以下:(必須指定具體的java)
./src/com/zc/class2json/trans/main/DataClass2Json.java ./src/com/zc/class2json/trans/test/TestDataClass2Json.java ./src/com/zc/dataclass/main/PersonData.java
建立class2json.sh,內容以下:
#!/bin/bash #設置臨時變量 lib=.:bin:lib/commons-beanutils-1.8.0.jar:lib/commons-collections-3.2.1.jar:lib/commons-lang-2.4.jar:lib/commons-logging-1.1.3.jar:lib/ezmorph-1.0.6.jar:lib/json-lib-2.3-jdk15.jar #編譯 javac -encoding UTF-8 -d bin -sourcepath src -classpath $lib @sourcelist.txt #運行 java -cp $lib com.zc.class2json.trans.test.TestDataClass2Json
運行:
bash class2json.sh 或者sh class2json.sh 或者 chmod +x class2json.sh ./class2json.sh
結果: