A. java裡面的jar包是否就相當於c#編譯生成的dll文件
dll文件,俗稱動態鏈接庫文件,是有執行程序可調用的二進制文件,也就是計算機能識別的二進制代碼,任何語言都可以調用。只是方法不同而已。
jar文件,一般是由java虛擬機解析的,其實相當於將一系列的位元組碼文件(.java文件)或者包,java虛擬機這些文件通過一些演算法序列化(壓縮),就形成了jar文件。但程序需要執行時java虛擬機將位元組碼文件再次編譯成二進制文件供計算機執行。
PS:這就是java是跨平台的原因。所有程序的位元組碼文件相同。不同操作系統上只需安裝不同的java虛擬機就可以執行相同的程序。
B. 如何快速反編譯JAVA的jar包或war包
有些時候我們面對一個class文件jar包或者war包,很想知道裡面有什麼參數,有什麼方法,但是又沒有文檔,又沒有源代碼,那怎麼辦呢。
沒關系,我們可以反編譯這些class文件或jar包或war包。
java的class文件存儲的是位元組碼,這些基本知識在此就不必啰嗦了。反正就是其存儲的信息足夠可以反編譯出來。
我們下載TTools中dist文件夾下的TdeCompile.jar可執行jar包,然後就可以開始反編譯工作了。使用方法很簡單,在命令行輸入命令即可,如下
[plain] view plain
java -jar TdeCompile.jar xxx.class
注意如果你不在TdeCompile的同目錄下,需要寫上TdeCompile.jar的路徑,其次跟一個參數xxx.class,xxx代表你所要反編譯的文件的文件名。輸出即是xxx.class.txt,它是反編譯過後的文件,txt文本格式,所在目錄通xxx.class。請確保你在xxx.class目錄下有寫許可權。
我們也可以直接操作一個jar包或war包。如:
[plain] view plain
java -jar TdeCompile.jar xxx.jar
程序可以自動識別是class文件還是jar或war包,如果是jar包或war包,則首先自動解壓縮,解壓縮的目錄為xxx.jar的同一個目錄,然後逐個反編譯class文件,在每個class文件的旁邊輸出一個xxx.class.txt文件。請確保你在jar包所在目錄有寫許可權。
TdeCompile的原理是利用了ASM去讀取每一個class文件的信息。
C. 如何用JAVAC一次性編譯多個包下的JAVA文件
1.利用-cp
cd xxx
dir *.java/s/b > srclist.txt
or dir x:/yyy/zzz/*.java/s/b > srclist.txt
javac -cp .;xxx/yyy/zzz.jar;x/y/z.jar -d classes @srclist.txt
2.直接使用
這個,主要是在做一個獨立的Java項目,它不依賴IDE,同時要在別人電腦上編譯運行
下面編譯運行用到了jar包、properties文件。首先進入項目的根目錄下,注意:每一行,表示:DOS系統將執行的指令。
G:
cd testJava
上面,兩個命令為模擬,進入項目根目錄(具體目錄,根據自己程序所在目錄)。
javac -classpath .;../previousRecord.properties;../lib/jtds-1.2.5.jar;com/cjb/properities/jdbc.properties com/cjb/jdbc/*.java com/cjb/client/*.java -encoding UTF-8
上面命令,表示:編譯com/cjb/jdbc下所有java類和com/cjb/client下所有java類,這些類用到了previousRecord.properties文件(它的路徑是相對的)和jtds-1.2.5.jar的文件jar包(它的路徑也是相對的),同時用的編碼是UTF-8。
java -Xms64m -Xmx512m -cp .;../previousRecord.properties;../lib/jtds-1.2.5.jar;com/cjb/properities/jdbc.properties com/cjb/client/MailDispatcherOperation
上面命令,表示:執行com/cjb/client下的MailDispatcherOperation.class(它裡面有Main函數)。
D. 修改jar包中的配置文件
原文地址: 修改jar包中的配置文件
現有jar包 base-web.jar
查找jar包裡面的文件:
jar ftv ks-web-1.0.3.jar | grep pom.xml
要修改jar包中配置文件可以用下面三種方式:
方式一 通過vim命令直接修改保存jar。超方便。
通過vim命令直接編輯jar
vim xxx.jar 該命令首先會列出全部文件,可以通過輸入/abc來搜索,定位到對應的abc文件後回車進入配置文件內進行編輯,:wq保存。
方式二 通過jar命令替換jar包中的文件(也可新增)
1.列出jar包中的文件清單
jar tf base-web.jar
2.提取出內部jar包的指定文件
jar xf base-web.jar `jar ft base-web.jar | grep t_ivr_data_bj.json`
3.然後可以修改文件
vim BOOT-INF/classes/realtime/t_ivr_data_bj.json
4.更新配置文件到內部jar包.(存在覆蓋,不存在就新增)
jar uf base-web.jar BOOT-INF/classes/realtime/t_ivr_data_bj.json
4.1更新內部jar包到jar文件
jar uf base-web.jar 內部jar包.jar
5.可以查看驗證是否已經更改
vim base-web.jar
方式三 解壓jar包,修改後重新打包jar
1.解壓
unzip base-web.jar
2.移除jar包,最好備份
rm base-web.jar
3.重新打包
jar -cfM0 base-web.jar *
或者
jar -cvfm0 base-web.jar ./META-INF/MANIFEST.MF ./
4.運行
java -jar base-web.jar
jar命令參數:
-c 創建新的存檔
-f 指定存檔文件名
-M 不配置配置清單,這樣還可以使用maven生成的配置清單也就是MANIFEST.MF
-0 不進行壓縮,如果壓縮會有問題
-m 指定清單文件
-t 列出歸檔目錄
-x 從檔案中提取指定的 (或所有) 文件
-u 更新現有的歸檔文件
-v 在標准輸出中生成詳細輸出
E. 在java代碼中實現動態編譯java文件
importjavax.tools.*;
importjava.io.*;
/**
*@authorhardneedl
*/
finalpublicclassMyCompile{
/**
*@paramargs命令行參數只有1個,即待編譯的源代碼文件的絕對路徑
*@throwsFileNotFoundException
*/
publicstaticvoidmain(String...args)throwsFileNotFoundException{
JavaCompilercompiler=ToolProvider.getSystemJavaCompiler();
intr=compiler.run(null,null,null,args[0]);
System.out.println(r==0?"成功":"失敗");
}
}
F. jar是什麼意思,jar文件怎麼打開
JAR文件是一種歸檔文件,以ZIP格式構建,以.jar為文件擴展名。打開方式如下:
1、桌面有一個jar的文件。
JAR 文件格式以 ZIP 文件格式為基礎。與 ZIP 文件不同的是,JAR 文件不僅用於壓縮和發布,而且還用於部署和封裝庫、組件和插件程序,並可被像編譯器和 JVM 這樣的工具直接使用。在 JAR 中包含特殊的文件,如 manifests 和部署描述符,用來指示工具如何處理特定的 JAR。
(6)java動態編譯jar包內的文件擴展閱讀
JAR文件的特點
1、安全性
可以對 JAR 文件內容加上數字化簽名。這樣,能夠識別簽名的工具就可以有選擇地為您授予軟體安全特權,這是其他文件做不到的,它還可以檢測代碼是否被篡改過。
2、減少下載時間
如果一個 applet 捆綁到一個 JAR 文件中,那麼瀏覽器就可以在一個 HTTP事務中下載這個 applet 的類文件和相關的資源,而不是對每一個文件打開一個新連接。
3、壓縮
JAR 格式允許您壓縮文件以提高存儲效率。
4、傳輸平台擴展
Java 擴展框架(Java Extensions Framework)提供了向 Java 核心平台添加功能的方法,這些擴展是用 JAR文件打包的(Java 3D 和 JavaMail 就是由 Sun 開發的擴展例子)。
G. java中,jar包裡面的類是源代碼嗎還是編譯後的文件位元組碼文件
起作用的是
位元組碼
文件,當然源代碼也可以打包進去,但不起作用。
H. java動態編譯jar找不到
~/usr/share/java/mysql-connector-java.jar
找不到MYSQL的戲,就是說明上面的路徑不對。。。。。。。。。
I. 如何修改jar包內的源文件
1、將class文件改成java文件(如果你的jar包中是包含源代碼的,即包含java文件,請跳過此步)
先將jar包通過winrar或者快壓等解壓縮軟體將jar包解壓縮,再通過一些專門的Java反編譯工具將class文件轉換為java文件(本博主是使用的是JD-GUI這個軟體)。
2、更改java源文件
將java文件放入自己專門的開發工具中(eclipse、myeclipse等),需要注意的是,應該是將需要改動的java文件放入java project中,並且要創建對應的package,再將原本的jar導入,此時可能還報錯,需要導入一些相應的jar包。當項目不報錯之後,就可以做你所需要的修改了。
3、導出jar包
將現在的java project導出為jar包,然後將原本jar包中相應的class文件替換掉(如果是jar包中含有java源文件,也需要將java文件也需要替換)。
至此,jar包修改成功。大家如果有什麼問題,可以直接問我或者在下方留言,本人qq:924325679。
J. 各位java高手,關於.jar包中的.class文件修改的問題
不要修改了,給它派生出一個子類或編輯同一個類後把源類替換掉得了。
上述方法是通過調用這個類包派生出一系列類重新生成一個JAR文件與其共用,使它達到你想要的效果,不過現在想想這個辦法工作量也不小,考慮下一個試試。
你可以把他們解壓出來,然後反編譯你需要改動的那個類,改動期間再進行反編譯需要牽涉到的類,這樣就不需要全部反編輯了。
現在我還沒有別的捷徑,也很想知道。
六月十五日
想把它壓縮成jar文件,暫且把java獨立應用程序分成兩種:
1)沒有用到Package的普通程序;
2)有Package的,一般有多個.class文件才用的。
1)比如你寫的java文件的目錄是:D:\JAVA\test.java;那麼你運行完會在同一目錄下生成一個test.class文件,這時新建一個MANIFEST.txt文檔(名字看清楚了)。
打開寫入以下內容:
Manifest-Version: 1.0
Created-By: 1.5.0_08 (Sun Microsystems Inc.)
Main-Class: test
保存為MANIFEST.MF。從命令行進入到JAVA目錄下,
敲入: jar cvfm test.jar manifest.mf test
這樣就生成了test.jar文件,直接點擊就可以運行。
2)還是這個目錄:D:\JAVA\test1.java和test2.java;且兩個程序都中有package com.chat,就是把生成的.class放在裡面,這時的MANIFEST.MF(可以用寫字板打開)
內容是:
Manifest-Version: 1.0
Created-By: 1.5.0_08 (Sun Microsystems Inc.)
Main-Class: com.chat.test1
註:test1里必須有main函數。
從命令行進入到JAVA目錄下,
敲入:jar cvfm t1.jar manifest.mf com/*;test2
同理。在DOS 下
jar fc a.jar a
a 是你要打包文件夾
a.jar 是打包後的文件名 隨便命名。