国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Java包如何更新包里的Class,或重新打包

2019-11-15 00:39:28
字體:
來源:轉載
供稿:網友
java包如何更新包里的Class,或重新打包

這里主要介紹 用基礎命令的形式執行的方法:

主要用到的只是,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; 這樣的代碼里看出來。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 连州市| 霍州市| 天长市| 兰坪| 会昌县| 南安市| 凌源市| 渑池县| 刚察县| 宁安市| 高唐县| 德阳市| 搜索| 荥经县| 青冈县| 德兴市| 泽普县| 石门县| 白山市| 丹凤县| 信丰县| 泰兴市| 清水县| 宝应县| 黎城县| 罗定市| 吴旗县| 敦煌市| 鹿泉市| 侯马市| 昌江| 泗洪县| 乌审旗| 潞城市| 靖州| 孝昌县| 香港| 依兰县| 松潘县| 都兰县| 武川县|