一个小工具用到了手工打包,头疼了一段时间,现在把自己的经验记录一下,希望对遇到同样问题的朋友有帮助。
一、需求
二、手工打包
三、fat jar 上场
所有文件及脚本,fat jar 都可下载(
http://www.blogjava.net/zhb8015/admin/Files.aspx)
************
一、需求:包涉及到三个类(src),几个jar包(lib),两个属性配置文件,一个jar包内(config/db.properties)一个jar包外(bams.properties),简单路径如下,
全路径在最后。我遇到的难点:A 属性文件的读取,包内包外相对路径获取。B 三方jar包如何打入。
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
二、手工打包:
打包前先讲一下文件的读取,包内和包外相对路径:
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 (第三方jar路径) src\com\vanceinfo\jvmmem\*.java
进入C:\test\jartest\src,并拷贝必须的属性文件进行打包,属性文件为 config/db.properties-->.../src/
编写MANIFEST.MF,这里一定要注意格式(这里不再详述,网上文章很多)
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是找不到jar包的,也就是它不能读到jar包中的第三方包。
B、上面的文件路径其实是为Ant的准备的,有兴趣的朋友可以看一下 下载下build.xml研究一下。
三、fat jar打包工具
查了好多资料还是没有解决,不过找到了一个比较好的打包工具 fat jar。
这个插件的介绍:
http://fhqdddddd.blog.163.com/blog/static/186991542011427104124407/
真的很方便,几步就搞定了。最好新建一个工程,拷贝所需要的文件.截图如下:
选择第三方包,还能导出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