一個小工具用到了手工打包,頭疼了一段時間,現(xiàn)在把自己的經(jīng)驗記錄一下,希望對遇到同樣問題的朋友有幫助。
一、需求
二、手工打包
三、fat jar 上場
所有文件及腳本,fat jar 都可下載(
http://m.tkk7.com/zhb8015/admin/Files.aspx)
************
一、需求:包涉及到三個類(src),幾個jar包(lib),兩個屬性配置文件,一個jar包內(nèi)(config/db.properties)一個jar包外(bams.properties),簡單路徑如下,
全路徑在最后。我遇到的難點:A 屬性文件的讀取,包內(nèi)包外相對路徑獲取。B 三方j(luò)ar包如何打入。
C:\TEST\JARTEST
├─1.5
├─build
│ ├─classes
│ │ ├─com
│ │ │ └─vanceinfo
│ │ │ └─jvmmem
│ │ ├─config
│ │ └─lib
│ └─jar
├─config
├─lib
├─src
│ └─com
│ └─vanceinfo
│ └─jvmmem
C:\test\jartest>tree /F src
卷 system 的文件夾 PATH 列表
卷序列號為 2099-0161
C:\TEST\JARTEST\SRC
└─com
└─vanceinfo
└─jvmmem
MessageData.java
ParsingLogFile.java
ParsingLogFileTest.java
二、手工打包:
打包前先講一下文件的讀取,包內(nèi)和包外相對路徑:
if(isDir) {
//read from user.dir
inputStream = new FileInputStream(new File(fileName));
} else {
//read from jar
inputStream = getClass().getResourceAsStream("/" + fileName);
}
說明://read from jar是從jar包中讀取congfig/db.properties屬性文件 fileName= "config/db.properties";
//read from user.dir 這里采用的是從絕對路徑讀取的fileName = System.getProperty("user.dir") + "/";讀取bams.properties
A、命令行編譯: C:\test\jartest>javac -cp (第三方j(luò)ar路徑) src\com\vanceinfo\jvmmem\*.java
進入C:\test\jartest\src,并拷貝必須的屬性文件進行打包,屬性文件為 config/db.properties-->.../src/
編寫MANIFEST.MF,這里一定要注意格式(這里不再詳述,網(wǎng)上文章很多)
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.7.1
Created-By: 20.2-b06 (Sun Microsystems Inc.)
Main-Class: com.vanceinfo.jvmmem.ParsingLogFile
Class-Path: lib/junit lib/junit-3.8.1.jar config/db.properties lib/ojd
bc14.jar lib/log4j-1.2.8.jar lib/mysql-connector-java-5.0.8-bin.jar l
ib/ojdbc14.jar
運行打包命令 java cvfm parsing.jar MANIFEST.MF com config lib 生成parsing.jar ,至此包已打完。
注意:運行java -jar parsing.jar是找不到j(luò)ar包的,也就是它不能讀到j(luò)ar包中的第三方包。
B、上面的文件路徑其實是為Ant的準備的,有興趣的朋友可以看一下 下載下build.xml研究一下。
三、fat jar打包工具
查了好多資料還是沒有解決,不過找到了一個比較好的打包工具 fat jar。
這個插件的介紹:
http://fhqdddddd.blog.163.com/blog/static/186991542011427104124407/
真的很方便,幾步就搞定了。最好新建一個工程,拷貝所需要的文件.截圖如下:

選擇第三方包,還能導(dǎo)出ant
點擊finish,搞定!運行時拷貝bams.propreties屬性文件到同目錄,直接運行即可。
全路徑:
C:\TEST\JARTEST
│ bams.properties
│ build.xml
│ Info.log
│ log4j.properties
│ readme.txt
│
├─1.5
│ bams.properties
│ build.xml
│ Info.log
│ parsing.jar
│
├─build
│ ├─classes
│ │ │ log4j.properties
│ │ │
│ │ ├─com
│ │ │ └─vanceinfo
│ │ │ └─jvmmem
│ │ │ MessageData.class
│ │ │ ParsingLogFile.class
│ │ │ ParsingLogFileTest.class
│ │ │
│ │ ├─config
│ │ │ db.properties
│ │ │
│ │ └─lib
│ │ junit-3.8.1.jar
│ │ junit.jar
│ │ log4j-1.2.8.jar
│ │ mysql-connector-java-5.0.8-bin.j
│ │ ojdbc14.jar
│ │
│ └─jar
│ bams.properties
│ Info.log
│ parsing.jar
│
├─config
│ db.properties
│
├─lib
│ junit-3.8.1.jar
│ junit.jar
│ log4j-1.2.8.jar
│ mysql-connector-java-5.0.8-bin.jar
│ ojdbc14.jar
│
├─src
│ └─com
│ └─vanceinfo
│ └─jvmmem
│ MessageData.java
│ ParsingLogFile.java
│ ParsingLogFileTest.java