é常åçåªæ两ç§ï¼ä¸ç§æ¯å¶ä½ä¸ä¸ªå¯æ§è¡ç JAR æ件å
ï¼ç¶åå°±å¯ä»¥å.chm ææ¡£ä¸æ ·åå»è¿è¡äºï¼èå¦ä¸ç§æ¯ä½¿ç¨ JET æ¥è¿è¡ ç¼è¯ãä½æ¯
JET æ¯è¦ç¨é±ä¹°çï¼èä¸æ®è¯´ JET ä¹ä¸æ¯è½æææç Java ç¨åºé½ç¼è¯ææ§è¡æ件ï¼æ§è½ä¹è¦æäºææ£ãæ以ï¼ä½¿ç¨å¶ä½å¯æ§è¡ JAR
æ件å
çæ¹æ³å°±æ¯æä½³éæ©äºï¼ä½åµå®è¿è½ä¿æ Java ç跨平å°ç¹æ§ã
ä¸é¢å°±æ¥ççä»ä¹æ¯ JAR æ件å
å§ï¼
1. JAR æ件å
JAR
æä»¶å°±æ¯ Java Archive Fileï¼é¡¾åææï¼å®çåºç¨æ¯ä¸ Java æ¯æ¯ç¸å
³çï¼æ¯ Java çä¸ç§ææ¡£æ ¼å¼ãJAR æ件é常类似
ZIP æ件ââåç¡®ç说ï¼å®å°±æ¯ ZIP æ件ï¼æ以å«å®æ件å
ãJAR æä»¶ä¸ ZIP æ件å¯ä¸çåºå«å°±æ¯å¨ JAR æ件çå
容ä¸ï¼å
å«äºä¸ä¸ª
META-INF/MANIFEST.MF æ件ï¼è¿ä¸ªæ件æ¯å¨çæ JAR æ件çæ¶åèªå¨å建çã举个ä¾åï¼å¦ææ们å
·æå¦ä¸ç®å½ç»æçä¸äºæ件ï¼
==
`-- test
`-- Test.class
æå®å缩æ ZIP æ件 test.zipï¼åè¿ä¸ª ZIP æ件çå
é¨ç®å½ç»æ为ï¼
test.zip
`-- test
`-- Test.class
å¦ææä»¬ä½¿ç¨ JDK ç jar å½ä»¤æå®ææ JAR æ件å
test.jarï¼åè¿ä¸ª JAR æ件çå
é¨ç®å½ç»æ为ï¼
test.jar
|-- META-INF
|ã `-- MANIFEST.MF
`-- test
`--Test.class
2. å建å¯æ§è¡ç JAR æ件å
å¶ä½ä¸ä¸ªå¯æ§è¡ç JAR æ件å
æ¥åå¸ä½ çç¨åºæ¯ JAR æ件å
æå
¸åçç¨æ³ã
Java
ç¨åºæ¯ç±è¥å¹²ä¸ª .class æ件ç»æçãè¿äº .class
æ件å¿
é¡»æ ¹æ®å®ä»¬æå±çå
ä¸åèå级åç®å½åæ¾ï¼è¿è¡åéè¦æææç¨å°çå
çæ ¹ç®å½æå®ç» CLASSPATH ç¯å¢åéæè
java å½ä»¤ç -cp
åæ°ï¼è¿è¡æ¶è¿è¦å°æ§å¶å°ä¸å»ä½¿ç¨ java å½ä»¤æ¥è¿è¡ï¼å¦æéè¦ç´æ¥åå»è¿è¡å¿
é¡»å Windows çæ¹å¤çæ件 (.bat) æè
Linux ç Shell ç¨åºãå æ¤ï¼è®¸å¤äººè¯´ï¼Java æ¯ä¸ç§æ¹ä¾¿å¼åè
è¦äºç¨æ·çç¨åºè®¾è®¡è¯è¨ã
å
¶å®ä¸ç¶ï¼å¦æå¼åè
è½
å¤å¶ä½ä¸ä¸ªå¯æ§è¡ç JAR æ件å
交ç»ç¨æ·ï¼é£ä¹ç¨æ·ä½¿ç¨èµ·æ¥å°±æ¹ä¾¿äºãå¨ Windows ä¸å®è£
JRE (Java Runtime
Environment) çæ¶åï¼å®è£
æ件ä¼å° .jar æ件æ å°ç» javaw.exe æå¼ãé£ä¹ï¼å¯¹äºä¸ä¸ªå¯æ§è¡ç JAR
æ件å
ï¼ç¨æ·åªéè¦åå»å®å°±å¯ä»¥è¿è¡ç¨åºäºï¼åé
读 .chm ææ¡£ä¸æ ·æ¹ä¾¿ (.chm ææ¡£é»è®¤æ¯ç± hh.exe
æå¼ç)ãé£ä¹ï¼ç°å¨çå
³é®ï¼å°±æ¯å¦ä½æ¥å建è¿ä¸ªå¯æ§è¡ç JAR æ件å
ã
å建å¯æ§è¡ç JAR æ件å
ï¼éè¦ä½¿ç¨å¸¦ cvfm åæ°ç jar å½ä»¤ï¼åæ ·ä»¥ä¸è¿° test ç®å½ä¸ºä¾ï¼å½ä»¤å¦ä¸ï¼
jar cvfm test.jar manifest.mf test
è¿
é test.jar å manifest.mf 两个æ件ï¼åå«æ¯å¯¹åºçåæ° f å mï¼å
¶é头æå¨ manifest.mfãå 为è¦å建å¯æ§è¡ç
JAR æ件å
ï¼å
é æå®ä¸ä¸ª manifest.mf æ件æ¯ä¸å¤çï¼å 为 MANIFEST æ¯ JAR æ件å
çç¹å¾ï¼å¯æ§è¡ç JAR
æ件å
åä¸å¯æ§è¡ç JAR æ件å
é½å
å« MANIFESTãå
³é®å¨äºå¯æ§è¡ JAR æ件å
ç MANIFESTï¼å
¶å
容å
å«äº
Main-Class ä¸é¡¹ãè¿å¨ MANIFEST ä¸ä¹¦åæ ¼å¼å¦ä¸ï¼
Main-Class: å¯æ§è¡ä¸»ç±»å
¨å(å
å«å
å)
ä¾å¦ï¼å设ä¸ä¾ä¸ç Test.class æ¯å±äº test å
çï¼èä¸æ¯å¯æ§è¡çç±» (å®ä¹äº public static void main(String[]) æ¹æ³)ï¼é£ä¹è¿ä¸ª manifest.mf å¯ä»¥ç¼è¾å¦ä¸ï¼
Main-Class: test.Test <å车>;
è¿ä¸ª manifest.mf å¯ä»¥æ¾å¨ä»»ä½ä½ç½®ï¼ä¹å¯ä»¥æ¯å
¶å®çæ件åï¼åªéè¦æ Main-Class: test.Test ä¸è¡ï¼ä¸è¯¥è¡ä»¥ä¸ä¸ªå车符ç»æå³å¯ãåå»ºäº manifest.mf æ件ä¹åï¼æ们çç®å½ç»æå为ï¼
==
|-- test
|ã `-- Test.class
`-- manifest.mf
è¿æ¶åï¼éè¦å° test ç®å½çä¸çº§ç®å½ä¸å»ä½¿ç¨ jar å½ä»¤æ¥å建 JAR æ件å
ãä¹å°±æ¯å¨ç®å½æ ä¸ä½¿ç¨â==â表示çé£ä¸ªç®å½ä¸ï¼ä½¿ç¨å¦ä¸å½ä»¤ï¼
jar cvfm test.jar manifest.mf test
ä¹åå¨â==âç®å½ä¸åå»ºäº test.jarï¼è¿ä¸ª test.jar å°±æ¯æ§è¡ç JAR æ件å
ãè¿è¡æ¶åªéè¦ä½¿ç¨ java -jar test.jar å½ä»¤å³å¯ã
é
è¦æ³¨æçæ¯ï¼å建ç JAR æ件å
ä¸éè¦å
å«å®æ´çãä¸ Java ç¨åºçå
ç»æ对åºçç®å½ç»æï¼å°±åä¸ä¾ä¸æ ·ãè Main-Class
æå®çç±»ï¼ä¹å¿
é¡»æ¯å®æ´çãå
å«å
è·¯å¾çç±»åï¼å¦ä¸ä¾ç test.Testï¼èä¸å¨æ²¡æææ JAR æ件å
ä¹åå¯ä»¥ä½¿ç¨ java
<ç±»å>; æ¥è¿è¡è¿ä¸ªç±»ï¼å³å¨ä¸ä¾ä¸ java test.Test æ¯å¯ä»¥æ£ç¡®è¿è¡ç (å½ç¶è¦å¨ CLASSPATH
æ£ç¡®çæ
åµä¸)ã
3. jar å½ä»¤è¯¦è§£
jar æ¯é JDK å®è£
çï¼å¨ JDK å®è£
ç®å½ä¸ç bin
ç®å½ä¸ï¼Windows ä¸æ件å为 jar.exeï¼Linux ä¸æ件å为 jarãå®çè¿è¡éè¦ç¨å° JDK å®è£
ç®å½ä¸ lib ç®å½ä¸ç
tools.jar æ件ãä¸è¿æ们é¤äºå®è£
JDK ä»ä¹ä¹ä¸éè¦åï¼å 为 SUN å·²ç»å¸®æ们å好äºãæ们çè³ä¸éè¦å° tools.jar æ¾å°
CLASSPATH ä¸ã
使ç¨ä¸å¸¦ä»»ä½ç jar å½ä»¤æ们å¯ä»¥çå° jar å½ä»¤çç¨æ³å¦ä¸ï¼
jar {ctxu}[vfm0M] [jar-æ件] [manifest-æ件] [-C ç®å½] æ件å ...
å
¶ä¸ {ctxu} æ¯ jar å½ä»¤çåå½ä»¤ï¼æ¯æ¬¡ jar å½ä»¤åªè½å
å« ctxu ä¸çä¸ä¸ªï¼å®ä»¬åå«è¡¨ç¤ºï¼
-cãå建æ°ç JAR æ件å
-tãååº JAR æ件å
çå
容å表
-xãå±å¼ JAR æ件å
çæå®æ件æè
æææ件
-uãæ´æ°å·²åå¨ç JAR æ件å
(æ·»å æä»¶å° JAR æ件å
ä¸)
[vfm0M] ä¸çé项å¯ä»¥ä»»éï¼ä¹å¯ä»¥ä¸éï¼å®ä»¬æ¯ jar å½ä»¤çé项åæ°
-vãçæ详ç»æ¥å并æå°å°æ åè¾åº
-fãæå® JAR æ件åï¼é常è¿ä¸ªåæ°æ¯å¿
é¡»ç
-mãæå®éè¦å
å«ç MANIFEST æ¸
åæ件
-0ãåªåå¨ï¼ä¸å缩ï¼è¿æ ·äº§çç JAR æ件å
ä¼æ¯ä¸ç¨è¯¥åæ°äº§ççä½ç§¯å¤§ï¼ä½é度æ´å¿«
-Mãä¸äº§çææ项çæ¸
åï¼MANIFESTãæ件ï¼æ¤åæ°ä¼å¿½ç¥ -m åæ°
[jar-æ件] å³éè¦çæãæ¥çãæ´æ°æè
解å¼ç JAR æ件å
ï¼å®æ¯ -f åæ°çéå±åæ°
[manifest-æ件] å³ MANIFEST æ¸
åæ件ï¼å®æ¯ -m åæ°çéå±åæ°
[-C ç®å½] 表示转å°æå®ç®å½ä¸å»æ§è¡è¿ä¸ª jar å½ä»¤çæä½ãå®ç¸å½äºå
ä½¿ç¨ cd å½ä»¤è½¬è¯¥ç®å½ä¸åæ§è¡ä¸å¸¦ -C åæ°ç jar å½ä»¤ï¼å®åªè½å¨å建åæ´æ° JAR æ件å
çæ¶åå¯ç¨ããã
æ件å ... æå®ä¸ä¸ªæ件/ç®å½å表ï¼è¿äºæ件/ç®å½å°±æ¯è¦æ·»å å° JAR æ件å
ä¸çæ件/ç®å½ãå¦ææå®äºç®å½ï¼é£ä¹ jar å½ä»¤æå
çæ¶åä¼èªå¨æ该ç®å½ä¸çæææ件ååç®å½æå
¥å
ä¸ã
ä¸é¢ä¸¾ä¸äºä¾åæ¥è¯´æ jar å½ä»¤çç¨æ³ï¼
1) jar cf test.jar test
该å½ä»¤æ²¡ææ§è¡è¿ç¨çæ¾ç¤ºï¼æ§è¡ç»ææ¯å¨å½åç®å½çæäº test.jar æ件ãå¦æå½åç®å½å·²ç»åå¨ test.jarï¼é£ä¹è¯¥æ件å°è¢«è¦çã
2) jar cvf test.jar test
该å½ä»¤ä¸ä¸ä¾ä¸çç»æç¸åï¼ä½æ¯ç±äº v åæ°çä½ç¨ï¼æ¾ç¤ºåºäºæå
è¿ç¨ï¼å¦ä¸ï¼
æ ææ¸
å(manifest)
å¢å ï¼test/(读å
¥= 0) (ååº= 0)(åå¨äº 0%)
å¢å ï¼test/Test.class(读å
¥= 7) (ååº= 6)(åç¼©äº 14%)
3) jar cvfM test.jar test
该å½ä»¤ä¸ 2) ç»æ类似ï¼ä½å¨çæç test.jar ä¸æ²¡æå
å« META-INF/MANIFEST æ件ï¼æå
è¿ç¨çä¿¡æ¯ä¹ç¥æå·®å«ï¼
å¢å ï¼test/(读å
¥= 0) (ååº= 0)(åå¨äº 0%)
å¢å ï¼test/Test.class(读å
¥= 7) (ååº= 6)(åç¼©äº 14%)
4) jar cvfm test.jar manifest.mf test
è¿è¡ç»æä¸ 2) ç¸ä¼¼ï¼æ¾ç¤ºä¿¡æ¯ä¹ç¸åï¼åªæ¯çæ JAR å
ä¸ç META-INF/MANIFEST å
容ä¸åï¼æ¯å
å«äº manifest.mf çå
容
5) jar tf test.jar
å¨ test.jar å·²ç»åå¨çæ
åµä¸ï¼å¯ä»¥æ¥ç test.jar ä¸çå
容ï¼å¦å¯¹äº 2) å 3) çæç test.jar åå«åºè¯¥æ¤å½ä»¤ï¼ç»æå¦ä¸ï¼
å¯¹äº 2)
META-INF/
META-INF/MANIFEST.MF
test/
test/Test.class
å¯¹äº 3)
test/
test/Test.class
6) jar tvf test.jar
é¤æ¾ç¤º 5) ä¸æ¾ç¤ºçå
容å¤ï¼è¿å
æ¬å
å
æ件ç详ç»ä¿¡æ¯ï¼å¦ï¼
0 Wed Jun 19 15:39:06 GMT 2002 META-INF/
86 Wed Jun 19 15:39:06 GMT 2002 META-INF/MANIFEST.MF
0 Wed Jun 19 15:33:04 GMT 2002 test/
7 Wed Jun 19 15:33:04 GMT 2002 test/Test.class
7) jar xf test.jar
è§£å¼ test.jar å°å½åç®å½ï¼ä¸æ¾ç¤ºä»»ä½ä¿¡æ¯ï¼å¯¹äº 2) çæç test.jarï¼è§£å¼åçç®å½ç»æå¦ä¸ï¼
==
|-- META-INF
|ã `-- MANIFEST
`-- test
`--Test.class
8) jar xvf test.jar
è¿è¡ç»æä¸ 7) ç¸åï¼å¯¹äºè§£åè¿ç¨æ详ç»ä¿¡æ¯æ¾ç¤ºï¼å¦ï¼
å建ï¼META-INF/
å±å¼ï¼META-INF/MANIFEST.MF
å建ï¼test/
å±å¼ï¼test/Test.class
9) jar uf test.jar manifest.mf
å¨
test.jar ä¸æ·»å äºæ件 manifest.mfï¼æ¤ä½¿ç¨ jar tf æ¥æ¥ç test.jar å¯ä»¥åç° test.jar
ä¸æ¯åæ¥å¤äºä¸ä¸ª manifestãè¿é顺便æä¸ä¸ï¼å¦æä½¿ç¨ -m åæ°å¹¶æå® manifest.mf æ件ï¼é£ä¹ manifest.mf
æ¯ä½ä¸ºæ¸
åæ件 MANIFEST æ¥ä½¿ç¨çï¼å®çå
容ä¼è¢«æ·»å å° MANIFEST ä¸ï¼ä½æ¯ï¼å¦æä½ä¸ºä¸è¬æ件添å å° JAR
æ件å
ä¸ï¼å®è·ä¸è¬æ件æ å¼ã
10) jar uvf test.jar manifest.mf
ä¸ 9) ç»æç¸åï¼åæ¶æ详ç»ä¿¡æ¯æ¾ç¤ºï¼å¦ï¼
å¢å ï¼manifest.mf(读å
¥= 17) (ååº= 19)(åç¼©äº -11%)
4. å
³äº JAR æ件å
çä¸äºæå·§
1) ä½¿ç¨ unzip æ¥è§£å JAR æ件
å¨
ä»ç» JAR æ件çæ¶å就已ç»è¯´è¿äºï¼JAR æ件å®é
ä¸å°±æ¯ ZIP æ件ï¼æ以å¯ä»¥ä½¿ç¨å¸¸è§çä¸äºè§£å ZIP æ件çå·¥å
·æ¥è§£å JAR
æ件ï¼å¦ Windows ä¸ç WinZipãWinRAR çå Linux ä¸ç unzip çãä½¿ç¨ WinZip å WinRAR
çæ¥è§£åæ¯å 为å®ä»¬è§£åæ¯è¾ç´è§ï¼æ¹ä¾¿ãèä½¿ç¨ unzipï¼åæ¯å 为å®è§£åæ¶å¯ä»¥ä½¿ç¨ -d åæ°æå®ç®æ ç®å½ã
å¨è§£åä¸ä¸ª
JAR æ件çæ¶åæ¯ä¸è½ä½¿ç¨ jar ç -C åæ°æ¥æå®è§£åçç®æ çï¼å 为 -C
åæ°åªå¨å建æè
æ´æ°å
çæ¶åå¯ç¨ãé£ä¹éè¦å°æ件解åå°æ个æå®ç®å½ä¸çæ¶åå°±éè¦å
å°è¿å
· JAR
æ件æ·è´å°ç®æ ç®å½ä¸ï¼åè¿è¡è§£åï¼æ¯è¾éº»ç¦ãå¦æä½¿ç¨ unzipï¼å°±ä¸éè¦è¿ä¹éº»ç¦äºï¼åªéè¦æå®ä¸ä¸ª -d åæ°å³å¯ãå¦ï¼
unzip test.jar -d dest/
2) ä½¿ç¨ WinZip æè
WinRAR çå·¥å
·å建 JAR æ件
ä¸
é¢æå° JAR æ件就æ¯å
å«äº META-INF/MANIFEST ç ZIP æ件ï¼æ以ï¼åªéè¦ä½¿ç¨ WinZipãWinRAR
çå·¥å
·å建æéè¦ ZIP å缩å
ï¼åå¾è¿ä¸ª ZIP å缩å
ä¸æ·»å ä¸ä¸ªå
å« MANIFEST æ件ç META-INF ç®å½å³å¯ã对äºä½¿ç¨ jar
å½ä»¤ç -m åæ°æå®æ¸
åæ件çæ
åµï¼åªéè¦å°è¿ä¸ª MANIFEST æéè¦ä¿®æ¹å³å¯ã
3) ä½¿ç¨ jar å½ä»¤å建 ZIP æ件
æ
äº Linux ä¸æä¾äº unzip å½ä»¤ï¼ä½æ²¡æ zip å½ä»¤ï¼æ以éè¦å¯ä»¥å¯¹ ZIP æ件è¿è¡è§£åï¼å³ä¸è½å建 ZIP æ件ãå¦è¦å建ä¸ä¸ª
ZIP æ件ï¼ä½¿ç¨å¸¦ -M åæ°ç jar å½ä»¤å³å¯ï¼å 为 -M åæ°è¡¨ç¤ºå¶ä½ JAR å
çæ¶åä¸æ·»å MANIFEST
æ¸
åï¼é£ä¹åªéè¦å¨æå®ç®æ JAR æ件çå°æ¹å° .jar æ©å±åæ¹ä¸º .zip æ©å±åï¼å建çå°±æ¯ä¸ä¸ªä¸æä¸æ£ç ZIP
æ件äºï¼å¦å°ä¸ä¸èç第 3) 个ä¾åç¥ä½æ¹å¨ï¼
jar cvfM test.zip test
温馨提示:内容为网友见解,仅供参考