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

        前言:本文教你怎麼用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命令用於打印,舉個例子:
        #!/bin/sh
        # 定義變量words,值爲hello world
        words="hello world"
        # 打印變量words的值
        echo $words
4. 命令
        shell腳本里面可以直接任意使用linux命令,要用到什麼命令直接敲進去即可。記住一些常用的命令:
        cd                   打開目錄
        ls -l                 顯示目錄信息
        rm -fr              遞歸刪除目錄及下面的文件,不提示信息
        mkdir              創建目錄
        pwd                顯示當前路徑
        kill -9 pid        強制殺掉某個進程號的進程
        pkill                殺掉某個名字的進程
        ps aux            顯示運行進程信息
        netstat -pan 查看網絡端口監聽情況
四、例子

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

#!/bin/sh
# Define some constants
ONSSERVER=ONSServer
PROJECT_PATH=/root/iot-oid
JAR_PATH=$PROJECT_PATH/lib
BIN_PATH=$PROJECT_PATH/bin
SRC_PATH=$PROJECT_PATH/src/$ONSSERVER

# First remove the sources.list file if it exists and then create the sources file of the project
rm -f $SRC_PATH/sources
find $SRC_PATH/com -name *.java > $SRC_PATH/sources.list

# First remove the ONSServer directory if it exists and then create the bin directory of ONSServer
rm -rf $BIN_PATH/$ONSSERVER
mkdir $BIN_PATH/$ONSSERVER

# Compile the project
javac -d $BIN_PATH/$ONSSERVER -classpath $JAR_PATH/jdom.jar:$JAR_PATH/oro-2.0.8.jar @$SRC_PATH/sources.list
        下面是文件run,用於執行程序:
#!/bin/sh

# Define some constants
ONSSERVER=ONSServer
PROJECT_PATH=/root/iot-oid
JAR_PATH=$PROJECT_PATH/lib
BIN_PATH=$PROJECT_PATH/bin

# Run the project as a background process
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


發佈了30 篇原創文章 · 獲贊 66 · 訪問量 65萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章