1. 程式人生 > >如何用javac 和java 編譯運行整個Java工程

如何用javac 和java 編譯運行整個Java工程

告訴 編譯 不同 .net 區別 ack 知識 best object

轉自:http://blog.csdn.net/huagong_adu/article/details/6929817

前言:本文教你怎麽用javac和Java命令,以及如何利用腳本(shell或bat)方便處理,並用簡單的實例展示這些用法。

IDE是把雙刃劍,它可以什麽都幫你做了,你只要敲幾行代碼,點幾下鼠標,程序就跑起來了,用起來相當方便。你不用去關心它後面做了些什麽,執行了哪些命令,基於什麽原理。然而也是這種過分的依賴往往讓人散失了最基本的技能,當到了一個沒有IDE的地方,你便覺得無從下手,給你個代碼都不知道怎麽去跑。好比給你瓶水,你不知道怎麽打開去喝,然後活活給渴死。

之前用慣了Myeclipse,Java文件編譯運行的命令基本忘得一幹二凈。現在項目出了原型,放到服務器上去測試,SSH一登陸上服務器就傻眼了,都是命令行,以前程序圖標什麽的都成了浮雲,程序放上去了不知道怎麽去編譯運行,只能補補課了,下面做下補課筆記。
一、javac命令
javac 用於編譯Java文件,格式為:
java [options] [sourcefiles] [@files]
其中:
options:命令行選項;
sourcefiles:一個或多個要編譯的源文件;
@files:一個或多個對源文件進行列表的文件,有時候要編譯的文件很多,一個個敲命令會顯得很長,也不方便修改,可以把要編譯的源文件列在文件中,在文件名前加@,這樣就可以對多個文件進行編譯,對編譯一個工程很有用,方便,省事。
有幾個比較重要的選項:
-d 用於指定編譯成的class文件的存放位置,缺省情況下不指定class文件的存放目錄,編譯的class文件將和源文件在同一目錄下;
-classpath 可以簡寫成-cp,用於搜索編譯所需的class文件,指出編譯所用到的class文件的位置,如jar、zip或者其他包含class文件的目錄,指定該選項會覆蓋CLASSPATH的設定;
-sourcepath用於搜索編譯所需的源文件(即java文件),指定要搜索的源文件的位置,如jar、zip或其他包含java文件的目錄;
需要註意windows下和linux下文件路徑分隔符和文件列表(即-classpath和-sourcepath指定的文件)分隔符的區別:
windows下文件路徑分隔符用 \ ,文件列表分隔符用分號 ;
linux下文件路徑分隔符用 / ,文件列表分隔符用冒號 :
二、java命令
java 用於執行程序,格式如下:
java [options] classfile
options:命令行選項,一般用於 -classpath 指定要執行的文件所在的位置以及需要用到的類路徑,包括jar、zip和class文件目錄,會覆蓋CLASSPATH的設定
三、腳本
如果要敲的命令很長,每次要編譯運行的時候都要重新敲一遍,這是一件很痛苦的事情,所以用腳本可以大大方便你的工作量。在linux下用shell腳本,windows下用bat批處理程序。因為是在linux下,我這裏只是簡單介紹一下shell,關於bat批處理程序的語法自己百度一下,不難。
1. 開頭
linux有很多不同的shell,通常使用bash(bourne again shell),程序必須以下面的行開始:
#!/bin/sh
#!用來告訴系統用後面的參數來執行程序,這裏使用的是/bin/sh
要使你的腳本能夠執行,還必須讓這個文件有可執行權限,使用下面命令更改文件權限:
chmod +x filename
2. 註釋
以#開始的句子表示註釋,一直到這行結束,多寫註釋有利於以後重新看的時候知道自己在做什麽
3. 變量
shell的腳本的變量都是字符串,不用申明類型,定義的時候直接 變量=值 即可,用到變量的的時候用 $變量 或者 ${變量},echo命令用於打印,舉個例子:

[python] view plain copy
  1. #!/bin/sh
  2. # 定義變量words,值為hello world
  3. words="hello world"
  4. # 打印變量words的值
  5. echo $words

4. 命令
shell腳本裏面可以直接任意使用linux命令,要用到什麽命令直接敲進去即可。記住一些常用的命令:
cd 打開目錄
ls -l 顯示目錄信息
rm -fr 遞歸刪除目錄及下面的文件,不提示信息
mkdir 創建目錄
pwd 顯示當前路徑
kill -9 pid 強制殺掉某個進程號的進程
pkill 殺掉某個名字的進程
ps aux 顯示運行進程信息
netstat -pan 查看網絡端口監聽情況
四、例子

下面是文件compile,用於編譯整個java工程,把編譯的文件放到指定目錄下:

[python] view plain copy
  1. #!/bin/sh
  2. # Define some constants
  3. ONSSERVER=ONSServer
  4. PROJECT_PATH=/root/iot-oid
  5. JAR_PATH=$PROJECT_PATH/lib
  6. BIN_PATH=$PROJECT_PATH/bin
  7. SRC_PATH=$PROJECT_PATH/src/$ONSSERVER
  8. # First remove the sources.list file if it exists and then create the sources file of the project
  9. rm -f $SRC_PATH/sources
  10. find $SRC_PATH/com -name *.java > $SRC_PATH/sources.list
  11. # First remove the ONSServer directory if it exists and then create the bin directory of ONSServer
  12. rm -rf $BIN_PATH/$ONSSERVER
  13. mkdir $BIN_PATH/$ONSSERVER
  14. # Compile the project
  15. javac -d $BIN_PATH/$ONSSERVER -classpath $JAR_PATH/jdom.jar:$JAR_PATH/oro-2.0.8.jar @$SRC_PATH/sources.list

下面是文件run,用於執行程序:

[python] view plain copy
  1. #!/bin/sh
  2. # Define some constants
  3. ONSSERVER=ONSServer
  4. PROJECT_PATH=/root/iot-oid
  5. JAR_PATH=$PROJECT_PATH/lib
  6. BIN_PATH=$PROJECT_PATH/bin
  7. # Run the project as a background process
  8. nohup java -classpath $BIN_PATH:$JAR_PATH/jdom.jar:$JAR_PATH/oro-2.0.8.jar com.ONSServer.DoUDPRequest &

以上是對javac、java和shell腳本的簡單總結,用的比較簡單,如有錯誤,歡迎指正!
個人原創,腦力產品,實屬不易,歡迎轉載,轉載請註明出處!

參考文獻:
javac和java命令:
http://jeffchen.iteye.com/blog/395671
http://www.blogjava.net/pdw2009/archive/2008/06/12/207413.html?opt=admin
shell編程:
http://bbs.chinaunix.net/thread-391751-1-1.html
http://hi.baidu.com/zccamy/blog/item/b5220f94517de10e7bf48057.html

如何用javac 和java 編譯運行整個Java工程