java命令行從編譯到打jar包到執行


 目錄:

一. javac編譯

    1. 沒有額外的jar包

    2. 包含額外的jar包

二、 jar打jar包

三、 java運行

    1. java命令執行

    2. jar包執行

四、 腳本完成編譯執行

 

整個過程模擬Eclipse的Java Project項目,包括src,以及生成的.class文件在bin中,還可能有lib,包含額外的jar包。

一. 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

 

二、 jar打jar包

參考我的博客 jar命令打jar包

 

三、 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

 

四、 腳本完成編譯執行

在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

結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM