這里主要介紹 用基礎命令的形式執行的方法:
主要用到的只是,javac,jar, java(*.exe)命令,
一.javac[Java源文件編譯成Class]
1.常用指令: javac-cp指定多個classpath
javac -classpath可以指定類路徑 來編譯java文件如:javac -classpath **/servlet-api.jar **.java 來編譯某個java文件需要指定多個路徑? 是用分號 ;隔開如:javac -cp classes; C:/Tomcat/lib/servlet-api.jar -encoding UTF-8 BeerSelect.java
(直接敲在CMD里面的)這就是用classes下的類文件和 servlet-api.jar一起來編譯
BeerSelect.java
PS: 這里要記住重點,在運行這個主程序的時候有可能用到的.jar包都需要把classpath指定,
內部編譯引用時才不會報錯,如果工程小,包不是很多,不太看重編譯時效的話,可以建議把工程
的包多放在一個類庫文件下。而打包時也把這個文件夾下的jar包全編譯到。
另,-encoding UTF-8是如果待編譯文件不全是英文,即’有漢字之類的,可以設置編碼,省的
編譯報錯。
2.其他指令或參數可以在CMD中輸入"javac"(plus enter key)或者“javac -help”
(plus enter key)看到注釋:
用法:javac <選項> <源文件>
其中,可能的選項包括: -g 生成所有調試信息 -g:none 不生成任何調試信息 -g:{lines,vars,source} 只生成某些調試信息 -nowarn 不生成任何警告 -verbose 輸出有關編譯器正在執行的操作的消息 -dePRecation 輸出使用已過時的 API 的源位置 -classpath <路徑> 指定查找用戶類文件的位置 -cp <路徑> 指定查找用戶類文件的位置 -sourcepath <路徑> 指定查找輸入源文件的位置 -bootclasspath <路徑> 覆蓋引導類文件的位置 -extdirs <目錄> 覆蓋安裝的擴展目錄的位置 -endorseddirs <目錄> 覆蓋簽名的標準路徑的位置 -d <目錄> 指定存放生成的類文件的位置 -encoding <編碼> 指定源文件使用的字符編碼 -source <版本> 提供與指定版本的源兼容性 -target <版本> 生成特定 VM 版本的類文件 -version 版本信息 -help 輸出標準選項的提要 -X 輸出非標準選項的提要 -J<標志> 直接將 <標志> 傳遞給運行時二.jar[*.jar Java中引用到的包的操作]
1.常用指令: jar cf 更新指定包里的指定文件或重打包
e.g. : %JAVA_HOME%/bin/jar cf lib/A.jar sample/B.class (這種格式多是寫在*.bat等
批處理文件來執行的,下同)
而利用jar命令直接修改包里面的文件(通常是Class文件)時,一定要很了解原包的結構再動手。
而且記住一個原則,包的引用和實際結構的關系是"." == "/"(解壓后會發現是實際的文件夾)
2.其他指令或參數可以在CMD中輸入"jar"(plus enter key)或者“jar -help”(plus enter key)
看到注釋:
用法:jar {ctxu}[vfm0Mi] [jar-文件] [manifest-文件] [-C 目錄] 文件名 ...
選項:
-c 創建新的存檔
-t 列出存檔內容的列表
-x 展開存檔中的命名的(或所有的〕文件
-u 更新已存在的存檔
-v 生成詳細輸出到標準輸出上
-f 指定存檔文件名
-m 包含來自標明文件的標明信息
-0 只存儲方式;未用zip壓縮格式
-M 不產生所有項的清單(manifest〕文件
-i 為指定的jar文件產生索引信息
-C 改變到指定的目錄,并且包含下列文件:
如果一個文件名是一個目錄,它將被遞歸處理。
清單(manifest〕文件名和存檔文件名都需要被指定,按'm' 和 'f'標志指定的相同順序。
首先在資源文件當前目錄寫一個清單文件example.mf
簡單例子可參看: http://blog.csdn.net/studyvcmfc/article/details/7745500
三.java[Class文件實際運行]
這個應該都比較熟,就是執行Java的Class文件(最后一步)’
如
java -cp .;c:/dir1/lib.jar Test -cp 和 -classpath 一樣,是指定類運行所依賴其他類的路徑,通常是類庫,jar包之類,需要
全路徑到jar包,window上分號“;”
又> e.g. : @"%JAVA_HOME%/bin/java" -cp lib/A.jar; ......sample.B "%~1"
同理可以用java或Java -help來查看:
options命令行選項(網上沒找到中文的,自己現在用的也不是中文,湊合先看著吧,用中文系統的,自己打下試試,很簡單的)Usage: java [-options] class [args...] (to execute a class) or java [-options] -jar jarfile [args...](to execute a jar file)where options include: -client to select the "client" VM -server to select the "server" VM -hotspot is a synonym for the "client" VM [deprecated] The default VM is client. -cp <class search path of directories and zip/jar files> -classpath <class search path of directories and zip/jar files> A ; separated list of directories, JAR archives, and ZIP archives to search for class files. -D<name>=<value> set a system property -verbose[:class|gc|jni] enable verbose output -version print product version and exit -version:<value> require the specified version to run -showversion print product version and continue -jre-restrict-search | -jre-no-restrict-search include/exclude user private JREs in the version search -? -help print this help message -X print help on non-standard options -ea[:<packagename>...|:<classname>] -enableassertions[:<packagename>...|:<classname>] enable assertions -da[:<packagename>...|:<classname>] -disableassertions[:<packagename>...|:<classname>] disable assertions -esa | -enablesystemassertions enable system assertions -dsa | -disablesystemassertions disable system assertions -agentlib:<libname>[=<options>] load native agent library <libname>, e.g. -agentlib:hprof see also, -agentlib:jdwp=help and -agentlib:hprof=help -agentpath:<pathname>[=<options>] load native agent library by full pathname -javaagent:<jarpath>[=<options>] load Java programming language agent, see java.lang.instrument總之步驟順序(1,2,3步)不要搞錯了就可以,有忘了的參數再去度娘查。
例‘(在Bat中代碼)
bat1.bat source
----------------------------------------------------------
REM @echo offREM 將B.java重新編譯成B.class%JAVA_HOME%/bin/javac -cp lib/A.jar;...... -encoding UTF-8 sample/B.javaREM 更新S.jar中B.class%JAVA_HOME%/bin/jar cf lib/S.jar sample/B.classREM 設置內部環境變量(這步看source情況,有的不需要)set FUNC_LANG=zhset INNER_HOME=...PATH=%INNER_HOME%/bin;%PATH%REM 實際調另外的.bat文件運行.java文件bat2.bat sampleFile/test.tif>C:/test/result.txt
bat2.bat source
----------------------------------------------------------
@"%JAVA_HOME%/bin/java" -cp lib/A.jar;... -Dxx=%ss% sample.B "%~1"
這個例子目的主旨是修改lib文件夾下的S.jar(..lib/S.jar) 中的B.class文件,更新即可
S.jar Tree:
S.jar |_____sample | |______B.class |_____META-INF
|______MANIFEST.MF
所以還是那句話,要改包,提前必須熟悉后這個包的結構,備份一個,然后再改。
※:最后提示一個很容易被忽略的關鍵點,在編譯的第1步中,實體source存放,如果
不想改很多source,一次編譯完,并且在第2步直接更新對應包對應關系目錄下的
Class的話。自己重寫后的.java文件保存位置,一定要營造一個和將要改的包的相對
位置關系一樣的路徑,否則出錯。如這里:若自己重寫了B.java文件,那么就要在
source目錄下,建立一個sample文件夾,并把自己重寫的B.java文件放進去。
這個一般也能從B.java里的首行 package sample; 這樣的代碼里看出來。
新聞熱點
疑難解答