天天看點

JAVA基礎知識之編譯、運作、打包

一:java環境設定

在環境變量中設定以下三個變量:

JAVA_HOME=C:\j2sdk1.4.1 //可以改為相應的目錄 CLASSPATH=%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar PATH=%JAVA_HOME%\bin;%PATH%

然後在指令行輸入java -version指令,如果出現

java version "1.4.1"

Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1-b21)

Java HotSpot(TM) Client VM (build 1.4.1-b21, mixed mode)

則說明已經配置成功!

HelloWorld.java源程式如下:

public class HelloWorld{    public static void main(String[] args) {        System.out.println("Hello World!");    } }

在指令行執行javac HelloWorld.java

如果沒有輸出任何資訊則說明編譯成功。

在指令行運作java HelloWorld,輸出:

Hello World!

代表成功執行了java程式。

二:初學者常犯的錯誤

1. 運作時,帶了.class字尾

如果你試圖使用如下指令:E:\java\src>java HelloWorld.class

系統會誤認為你運作的是HelloWorld包下的名為class的類檔案,會到系統的CLASSPATH下(一般都包括目前目錄)企圖尋找 HelloWorld.class.class這樣的類,這樣的類當然不存在了;并且也不可能存在,因為class是關鍵字,不能作為一個類的名字。是以會報如下錯誤資訊:

Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld/class

2. 檔案名大小寫錯誤

對于像Windows這樣的系統,編譯時可以不關心大小寫。比如編譯HelloWorld.java時,也可以使用:

E:\java\src>javac helloworld.java

也可以編譯通過,但産生的類檔案仍然是和源檔案相符的:HelloWorld.class。

但在運作時一定要注意大小寫,比如試圖使用如下指令運作:

E:\java\src>java helloworld

将報類似于1中的錯誤:

Exception in thread "main" java.lang.NoClassDefFoundError: helloworld (wrong name: HelloWorld)

三:包含包層次的HelloWorld.java

比如上面的HelloWorld.java修改如下:

package org.javaresearch; public class HelloWorld{     public static void main(String[] args) {         System.out.println("Hello World!");      }

編譯時有兩種方法

1. 直接編譯

E:\java\src>javac HelloWorld.java

此時在目前目錄下輸出HelloWorld.class。此時,運作不能使用上面相同的方法,使用:

E:\java\src>java HelloWorld

運作時,出現如下錯誤:

Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld (wrong name: org/javaresearch/HelloWorld)

從上述錯誤資訊你也可以看到,系統可以找到HelloWorld類(因為目前路徑包含在CLASSPATH中,具體為什麼會提示wrong name,有興趣的朋友參見Java語言規範),但這個類屬于org.javaresearch包。是以,你要做的就是按照上述包層次,相應的建立目錄層次,把上面生成的HelloWorld.class放到E:\java\src\org\javaresearch\目錄下。運作:

E:\java\src >java org.javaresearch.HelloWorld

系統列印出:

這兒要注意的是,不能使用java org\javaresearch\HelloWorld來運作,此時同樣會出現如下錯誤:

Exception in thread "main" java.lang.NoClassDefFoundError:org\javaresearch\HelloWorld (wrong name: org/javaresearch/HelloWorld)

2. 使用 -d <directory>編譯選項

是不是覺得上面的編譯方法有點麻煩,能不能自動在目前路徑(或任意指定的路徑)下生成包層次呢?有!使用-d <directory>編譯選項就能做到。

E:\java\src >javac -d . HelloWorld.java

此時,在目前目錄下就生成了一個org\javaresearch目錄,并且輸出的.class檔案也在裡面。運作:

系統列印:Hello World!

如果你想把生成的類檔案集中存放在一個目錄中,比如:E:\java\classes下,那麼你首先建立這個目錄,然後編譯時:

E:\java\src >javac -d E:\java\classes HelloWorld.java

就可以把生成的類檔案放到E:\java\classes目錄下,并且按照包層次相應的建立目錄路徑。你可以在E:\java\classes\org \javaresearch下找到HelloWorld.class檔案。此時使用如下指令可以正确運作(注意如果要用到其它類,請在CLASSPATH 中設好):

E:\java\classes >java org.javaresearch.HelloWorld

或者你可以在E:\java目錄下面運作以下指令來執行

E:\java >java -classpath .\classes org.javaresearch.HelloWorld

使用java的-classpath參數可以将一些目錄加入類路徑

四:打包jar檔案

可以把一個包内的所有class檔案打包為一個jar檔案,便于存放和運作。以上文的org.javaresearch包為例,其打包指令如下:

E:\java\classes >jar cvf wxb.jar org

會生成一個wxb.jar檔案,将其中META-INF\MANIFEST.MF檔案中添加如下一行:

Main-Class: org.javaresearch.HelloWorld

儲存jar檔案。

或者首先建立并編輯一個MANIFEST.MF檔案,其内容如下:

Manifest-Version: 1.0

Created-By: 1.4.1 (Sun Microsystems Inc.)

将其儲存到classes目錄中

然後将其一起打包到jar檔案中,打包指令如下:

E:\java\classes >jar cvfm wxb.jar MANIFEST.MF org

五:Eclipse導出jar

第一:普通類導出jar包,我說的普通類就是指此類包含main方法,并且沒有用到别的jar包。 

1.在eclipse中選擇你要導出的類或者package,右擊,選擇Export子選項; 

2.在彈出的對話框中,選擇java檔案---選擇JAR file,單擊next; 

3.在JAR file後面的文本框中選擇你要生成的jar包的位置以及名字,注意在Export generated class files and resources和Export java source files and resources前面打上勾,單擊next; 

4.單擊兩次next按鈕,到達JAR Manifest Specification。注意在最底下的Main class後面的文本框中選擇你的jar包的入口類。單擊Finish,完成。 

你可以在dos環境下,進入你的jar所在的目錄,運作 java -jar 名字.jar,檢測運作是否正确。 

第二、你所要導出的類裡邊用到了别的jar包。比如說你寫的類連接配接了資料庫,用到資料庫驅動包oracl.jar.。 

1.先把你要導出的類按照上面的步驟導出形成jar包,比如叫test.jar 

2.建立一個檔案夾main,比如在D盤根目錄下; 

3.把test.jar和oracl.jar拷貝到main檔案下,右擊test.jar,解壓到目前檔案夾。把META-INF\MANIFEST.MF剪切到另外一個地方 (比如是桌面!) ; 

4.右擊oracl.jar,解壓到目前檔案夾。 

5.在dos環境下,進入到D盤的main檔案夾下,執行 jar cvfm new.jar meta-inf/manifest.mf .,不要忘了最後面的點。 

6.用壓縮工具打開你新生成的new.jar,用你放在桌面的META-INF\MANIFEST.MF覆寫new.jar原有。 

你可以在dos環境下,進入你的jar所在的目錄,運作 java -jar 名字.jar,檢測運作是否正确。

六:運作jar檔案

在指令行中輸入如下指令即可:

E:\java\classes >java -jar wxb.jar

輸出為:

七:jar,war,ear差別

這三種檔案都可以看作是java的壓縮格式,其實質是實作了不同的封裝:

jar--封裝類

war--封裝web站點

ear--封裝ejb。

它們的關系具體為:

jar:      是java Achieve--按java格式壓縮的類包,包含内容 class、properties檔案,    是檔案封裝的最小單元 級别:小

war:     是file web Achieve--包含Servlet、JSP頁面、JSP标記庫、JAR庫檔案HTML/XML文檔和其他公用資源檔案,如圖檔、音頻檔案等 級别:中

ear:    是 file Enterprise Achieve--除了包含JAR、WAR以外,還包括EJB元件   部署檔案 application-client.xml web.xml application.xml    級别:大

本文轉自最課程陸敏技部落格園部落格,原文連結:http://www.cnblogs.com/luminji/p/4550446.html,如需轉載請自行聯系原作者