【java學習】jar、arr和程式打包
1,*.jar(JAR 檔案,Java Archive File,Java 歸檔檔案)
1)概念
是 Java 的一種文件格式。只包含了class檔案與清單檔案 ,不包含資原始檔,是與平臺無關的檔案格式。
解壓:jar檔案使用了ZIP壓縮格式。找一個jar檔案,然後修改字尾名為‘zip’或者‘rar’格式,可解壓該檔案,點選‘com‘資料夾就會看到裡面全部是‘.class’檔案。
ZIP壓縮
壓縮可以分為無失真壓縮和有失真壓縮,有損,指的是壓縮之後就無法完整還原原始資訊,但是壓縮率可以很高,主要應用於視訊、話音等資料的壓縮。無失真壓縮則用於檔案等等必須完整還原資訊的場合。ZIP、RAR、GZIP、GIF、PNG等等都是無失真壓縮格式。
2)優點
JAR 檔案格式提供了許多優勢和功能,其中很多是傳統的壓縮格式如 ZIP 或者 TAR 所沒有提供的:
安全性、減少下載時間、傳輸平臺擴充套件、包密封、包版本控制、可移植性
3)場景
JAR 檔案格式以流行的 ZIP 檔案格式為基礎。
與 ZIP 檔案不同的是,JAR 檔案不僅用於壓縮和釋出,而且還用於部署和封裝庫、元件和外掛程式,並可被編譯器和 JVM 這樣的工具直接使用。
在 JAR 中包含特殊的檔案,如 manifests 和部署描述符,用來指示工具如何處理特定的 JAR。
4)使用
*.jar檔案拷貝到libs目錄,eclipse直接匯入即可,AndroidStudio專案中新增:
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
}
5)Pack200
Java5中帶了一個壓縮工具:Pack200,這個工具能對普通的jar檔案進行高效壓縮。其實現原理是根據Java類特有的結構,合併常數池,去掉無用資訊等來實現對java類的高效壓縮。由於是專門對Java類進行壓縮的,所以對普通檔案的壓縮和普通壓縮軟體沒有什麼兩樣,但是對於Jar檔案卻能輕易達到10-40%的壓縮率,甚至接近90%。這在Java應用部署中很有用,尤其對於移動Java計算,能夠大大減小程式碼下載量。
Java5中還提供了這一技術的API介面,你可以將其嵌入到你的程式中使用。使用的方法很簡單:
壓縮
Packer packer=Pack200.newPacker();
OutputStream output=new BufferedOutputStream(new FileOutputStream(outfile));
packer.pack(new JarFile(jarFile), output);
output.close();
解壓
Unpacker unpacker=Pack200.newUnpacker();
output=new JarOutputStream(new FileOutputStream(jarFile));
unpacker.unpack(pack200File, output);
output.close();
6)組成
JAR包比普通zip檔案多了一個META-INF資料夾,該資料夾下包括了一個MANFEST.MF檔案(清單檔案)。
①清單檔案
一般屬性
Manifest-Version
用來定義manifest檔案的版本號,比如:Manifest-Version: 1.0。最小的清單檔案只包含這一條。
Created-By
宣告該檔案的生成者,一般該屬性是由jar命令列工具生成的。比如:Created-By: Apache Ant 1.5.1
Signature-Version
定義jar檔案的簽名版本號
Class-Path
應用程式或者類裝載器使用該值來構建內部的類搜尋路徑
應用程式相關屬性
Main-Class
定義jar檔案的入口類。該類必須是一個可執行的類,一旦定義了該屬性就可以通過 java -jar x.jar來執行該jar檔案。
7)啟動
在Windows下安裝JRE的時候,安裝檔案會把.jar檔案對映給javaw.exr開啟,對於一個可執行的JAR包而言,能夠直接雙擊開啟。想要製作可執行JAR包,指定Main-Class是關鍵。
使用cvmf命令進行打包
jar -cvmf MANIFEST.MF allenwells.jar com
可以利用jar命令中的e選項制定程式入口點。使用者可以通過以下命令啟動應用程式:
java -jar My.jar
製作可執行Jar包:
8)常用命令
-c 建立新的JAR檔案包。
-t 列出JAR檔案包的內容列表。
-x 展開JAR檔案包的指定檔案或全部檔案。
-u 更新已存在的JAR包。對於一個已經存在的JAR包。我們任然能夠向當中加入新的位元組碼檔案或舊的位元組碼檔案,假設已經存在路徑、類名都同樣的檔案,則更新原始檔,假設不存在。則加入該檔案。清單檔案也能夠通過這種方式更改。
-v 生成具體的報告並列印到標準輸出。
-f 指定JAR包的檔名稱。通常該選項是必選的。
-m 指定須要包括的MANIFEST.MF清單檔案。
-O 僅僅儲存。不壓縮。
生成的JAR包體積大,但執行速度快。
-M 不產生全部項的清單檔案,此引數會忽略-m選項。
[-C 資料夾] 表示轉到指定資料夾下去執行jar命令的操作,它相當於優先使用cd命令轉到指定資料夾下執行不帶-C引數的jar命令。它僅僅能在建立和更新JAR包的時候使用
以下舉一些具體使用的樣例:
jar tvf allenwells.jar
顯示allenwells.jar內包括檔案的具體資訊。
jar -xvf allenwells.jar
解壓allenwells.jar到當前資料夾,並顯示具體的解壓過程資訊。
jar cvf allenwells.jar com
將com資料夾下的class檔案生成allenwells.jar檔案,並顯示打包過程,假設已經存在該檔案,那麼該檔案會被覆蓋。
jar cvfm allenwells.jar mymanifest.mf -C com/ .
使用自己定義的清單檔案mymanifest.mf並將com/資料夾下的全部檔案歸檔到allenwells.jar中。allenwells.jar被儲存到當前資料夾。
jar uvf allenwells.jar manifest.mf
向allenwells.jar中加入manifest.mf檔案,這裡僅僅是作為普通檔案加入進去。
假設指定了-m選項,那麼manifest.mf會作為清單檔案來使用,其內容會被加入到MANIFEST.MF中。
2,*.aar,AAR(Android Archive)
1)概念
是一個Android庫專案的二進位制歸檔檔案,包含所有資源,class以及res資原始檔。
解壓:找一個aar檔案,然後修改字尾名為‘zip’或者‘rar’格式,然後解壓該檔案,開啟解壓後的資料夾,每個aar解壓後的內容可能不完全一樣,但是都會包含AndroidManifest.xml,classes.jar,res,R.txt。
2)場景
對於一些不常變動的 Android Library,我們可以直接引用 aar,加快編譯速度。
3)使用
*.aar檔案使用有兩種方式:
①線上使用(網上的)
網路載入,只要你知道*.aar檔案在maven中的路徑即可。然後引入gradle依賴。
②新增本地的*.aar檔案
在Android Studio中載入本地的*.aar檔案:
(1).把aar檔案放在一個檔案目錄內,比如就放在libs目錄內;
(2).在app的build.gradle檔案新增如下內容;
repositories {
flatDir {
dirs 'libs'
}
}
(3).之後只需要新增一句gradle依賴便方便的引用了該aar檔案;
dependencies {
...
compile(name:'test', ext:'aar')
...
}
3,
相關文章
- Intellij Idea 將Java專案打包成jarIntelliJIdeaJavaJAR
- AndroidStudio最新打包jar和aar的方法AndroidJAR
- Intellij Idea 將java專案打包成jar,cmd執行該jarIntelliJIdeaJavaJAR
- Idea Java Maven建立專案,新增依賴,引用本地jar,打包jarIdeaJavaMavenJAR
- idea打包jar包IdeaJAR
- springboot,springcloud打包成jar教程Spring BootGCCloudJAR
- AndroidStudio專案打包成jarAndroidJAR
- webpack打包學習Web
- Java 如何打增量 jar 包【修改部分檔案不需全部打包】JavaJAR
- webpack v3 學習筆記(三) 打包css程式碼 和 Tree ShakingWeb筆記CSS
- Android Studio打包apk,aar,jar包AndroidAPKJAR
- Assemby 打包並啟動jar包JAR
- java -jar demo.jarJavaJAR
- IDEA打包工具類jar並混淆IdeaJAR
- AndroidStudio打包Library專案成jar包AndroidJAR
- Java 學習:物件和類Java物件
- java-jar啟動jar包JavaJAR
- jenkins將打包的jar包部署到nexusJenkinsJAR
- java學習回顧---執行緒和同步程式碼塊Java執行緒
- 8、Ktor學習-部署之打包;
- java -jar 在後臺執行和關閉JavaJAR
- Maven打包springboot框架的可執行的jarMavenSpring Boot框架JAR
- 把可執行jar打包成exe檔案JAR
- springboot將jsp打包成jar執行的坑Spring BootJSJAR
- linux中常見的打包壓縮命令——tar、jarLinuxJAR
- java修改jar包JavaJAR
- Java學習之程式碼優化Java優化
- java註解初步學習和使用Java
- JAVA程式設計學習記錄(安裝Java)Java程式設計
- java學習之道 --- 如何學習java?Java
- webpack學習(二)初識打包配置Web
- 尚矽谷Java基礎——學習程式碼和筆記_day02Java筆記
- Springboot 在 Linux 中打包 Jar 包在後臺執行Spring BootLinuxJAR
- 【java學習】GUI 圖形程式設計JavaGUI程式設計
- Java學習之程式碼最佳化Java
- Java學習之AWT GUI程式設計JavaGUI程式設計
- 如何學習用Java編寫程式碼?Java
- 《java學習二》併發程式設計Java程式設計