一段時(shí)間不用Java,經(jīng)常忘記一些煩瑣的設(shè)置,特意寫此文檔備案。
-------------
java環(huán)境設(shè)置
-------------
在環(huán)境變量中設(shè)置以下三個(gè)變量:
JAVA_HOME=C:\j2sdk1.4.1 //可以改為相應(yīng)的目錄
CLASSPATH=%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar
PATH=%JAVA_HOME%\bin;%PATH%
然后在命令行輸入java -version命令,如果出現(xiàn)
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)
則說明已經(jīng)配置成功!
HelloWorld.java源程序如下:
public class HelloWorld{?
?public static void main(String[] args) {??
??System.out.println("Hello World!");?
??}
}
在命令行執(zhí)行javac HelloWorld.java
如果沒有輸出任何信息則說明編譯成功。
在命令行運(yùn)行java HelloWorld,輸出:
Hello World!
代表成功執(zhí)行了java程序。
-----------------
初學(xué)者常犯的錯(cuò)誤
-----------------
1. 運(yùn)行時(shí),帶了.class后綴
如果你試圖使用如下命令:
E:\java\src>java HelloWorld.class
系統(tǒng)會(huì)誤認(rèn)為你運(yùn)行的是HelloWorld包下的名為class的類文件,會(huì)到系統(tǒng)的CLASSPATH下(一般都包括當(dāng)前目錄)企圖尋找HelloWorld.class.class這樣的類,這樣的類當(dāng)然不存在了;并且也不可能存在,因?yàn)閏lass是關(guān)鍵字,不能作為一個(gè)類的名字。所以會(huì)報(bào)如下錯(cuò)誤信息:
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld/class
2. 文件名大小寫錯(cuò)誤
對(duì)于像Windows這樣的系統(tǒng),編譯時(shí)可以不關(guān)心大小寫。比如編譯HelloWorld.java時(shí),也可以使用:
E:\java\src>javac helloworld.java
也可以編譯通過,但產(chǎn)生的類文件仍然是和源文件相符的:HelloWorld.class。
但在運(yùn)行時(shí)一定要注意大小寫,比如試圖使用如下命令運(yùn)行:
E:\java\src>java helloworld
將報(bào)類似于1中的錯(cuò)誤:
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!");?
}
}
編譯時(shí)有兩種方法
1. 直接編譯
E:\java\src>javac HelloWorld.java
此時(shí)在當(dāng)前目錄下輸出HelloWorld.class。此時(shí),運(yùn)行不能使用上面相同的方法,使用:
E:\java\src>java HelloWorld
運(yùn)行時(shí),出現(xiàn)如下錯(cuò)誤:
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld (wrong name: org/javaresearch/HelloWorld)
從上述錯(cuò)誤信息你也可以看到,系統(tǒng)可以找到HelloWorld類(因?yàn)楫?dāng)前路徑包含在CLASSPATH中,具體為什么會(huì)提示wrong name,有興趣的朋友參見Java語(yǔ)言規(guī)范),但這個(gè)類屬于org.javaresearch包。所以,你要做的就是按照上述包層次,相應(yīng)的創(chuàng)建目錄層次,把上面生成的HelloWorld.class放到E:\java\src\org\javaresearch\目錄下。運(yùn)行:
E:\java\src >java org.javaresearch.HelloWorld
系統(tǒng)打印出:
Hello World!
這兒要注意的是,不能使用java org\javaresearch\HelloWorld來運(yùn)行,此時(shí)同樣會(huì)出現(xiàn)如下錯(cuò)誤:
Exception in thread "main" java.lang.NoClassDefFoundError:org\javaresearch\HelloWorld (wrong name: org/javaresearch/HelloWorld)
2. 使用 -d <directory>編譯選項(xiàng)
是不是覺得上面的編譯方法有點(diǎn)麻煩,能不能自動(dòng)在當(dāng)前路徑(或任意指定的路徑)下生成包層次呢?有!使用-d <directory>編譯選項(xiàng)就能做到。
E:\java\src >javac -d . HelloWorld.java
此時(shí),在當(dāng)前目錄下就生成了一個(gè)org\javaresearch目錄,并且輸出的.class文件也在里面。運(yùn)行:
E:\java\src >java org.javaresearch.HelloWorld
系統(tǒng)打印:Hello World!
如果你想把生成的類文件集中存放在一個(gè)目錄中,比如:E:\java\classes下,那么你首先創(chuàng)建這個(gè)目錄,然后編譯時(shí):
E:\java\src >javac -d E:\java\classes HelloWorld.java
就可以把生成的類文件放到E:\java\classes目錄下,并且按照包層次相應(yīng)的創(chuàng)建目錄路徑。你可以在E:\java\classes\org\javaresearch下找到HelloWorld.class文件。此時(shí)使用如下命令可以正確運(yùn)行(注意如果要用到其它類,請(qǐng)?jiān)贑LASSPATH中設(shè)好):
E:\java\classes >java org.javaresearch.HelloWorld
或者你可以在E:\java目錄下面運(yùn)行以下命令來執(zhí)行
E:\java >java -classpath .\classes org.javaresearch.HelloWorld
使用java的-classpath參數(shù)可以將一些目錄加入類路徑
-------------------
打包jar文件
-------------------
可以把一個(gè)包內(nèi)的所有class文件打包為一個(gè)jar文件,便于存放和運(yùn)行。以上文的org.javaresearch包為例,其打包命令如下:
E:\java\classes >jar cvf wxb.jar org
會(huì)生成一個(gè)wxb.jar文件,將其中META-INF\MANIFEST.MF文件中添加如下一行:
Main-Class: org.javaresearch.HelloWorld
保存jar文件。
或者首先創(chuàng)建并編輯一個(gè)MANIFEST.MF文件,其內(nèi)容如下:
Manifest-Version: 1.0
Created-By: 1.4.1 (Sun Microsystems Inc.)
Main-Class: org.javaresearch.HelloWorld
將其保存到classes目錄中
然后將其一起打包到j(luò)ar文件中,打包命令如下:
E:\java\classes >jar cvfm wxb.jar MANIFEST.MF org
-------------
運(yùn)行jar文件
-------------
在命令行中輸入如下命令即可:
E:\java\classes >java -jar wxb.jar
輸出為:
Hello World!
------------------------
用Ant來編譯運(yùn)行java程序
------------------------
首先安裝Ant,步驟很簡(jiǎn)單:
1.將Ant壓縮包解壓到一個(gè)目錄,例如D:\Ant1.5.2;
2.在環(huán)境變量中添加以下變量:
ANT_HOME=D:\Ant1.5.2? //可以改為相應(yīng)的目錄
3.修改Path環(huán)境變量
PATH=%ANT_HOME%\bin;%PATH%
最后給出了一個(gè)Ant的build.xml文件,運(yùn)行ant即可完成所有以上的編譯和運(yùn)行過程,其build文件如下:
<project name="HelloWorld" default="jar" basedir=".">
??? <description>
??????? building HelloWorld!
??? </description>
? <!-- set global properties for this build -->
? <property name="src" location="src"/>
? <property name="build" location="classes"/>
? <property name="dist"? location="dist"/>
? <property name="user.name" value="Wang Xuebin"/>
? <target name="init">
??? <!-- Create the time stamp -->
??? <tstamp/>
??? <!-- Create the classes directory structure used by compile -->
??? <mkdir dir="${build}"/>
? </target>
? <target name="build" depends="init"? description="build the source code" >
??? <!-- Compile the java code from ${src} into ${build} -->
??? <javac srcdir="${src}" destdir="${build}"/>
? </target>
? <target name="jar" depends="build"
??????? description="generate the distribution" >
??? <!-- Create the distribution directory -->
??? <mkdir dir="${dist}/lib"/>
??? <!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file -->
??<jar destfile="${dist}/HelloWorld-${DSTAMP}.jar" basedir="${build}">
???<manifest>
????<attribute name="Built-By" value="${user.name}"/>
????<attribute name="Main-Class" value="org.javaresearch.HelloWorld"/>
???</manifest>
??</jar>?
?</target>
?
? <target name="run" depends="build" description="run HelloWorld">
??? <java classpath="${build}" classname="org.javaresearch.HelloWorld"></java>
? </target>
? <target name="runjar" depends="jar" description="run HelloWorld in jar file">
???????? <java jar="${dist}/HelloWorld-${DSTAMP}.jar"
?????????? fork="true"
?????????? failonerror="true"
?????????? maxmemory="128m"
?????????? >
???????? <arg value="-h"/>
???????? <classpath>
?????????? <pathelement location="${dist}/HelloWorld-${DSTAMP}.jar"/>
?????????? <pathelement path="${java.class.path}"/>
???????? </classpath>
?????? </java>
? </target>
?
? <target name="clean"
??????? description="clean up" >
??? <!-- Delete the ${build} and ${dist} directory trees -->
??? <delete dir="${build}"/>
??? <delete dir="${dist}"/>
? </target>
</project>
?