背景:
最近看packetNg 打包插件,遇到一个问题,编码的问题导致打出来的渠道包,乱码问题,虽然已经解决了,但是还是想吧过程分享一下
有几个重点:
1. DOS 窗口 Java -jar 打jar包命令
2. 如果要直接运行jar 包中的类,需要自行修改META-INF中 MF 文件内容(修改MF 文件需要符合MF 文件的格式 需要在最后空两行否则出现异常 没有找到主类),当然网上很多都是二次打包,而且容易出错,有一种直接可以指定MAIN-CLASS 的方法。
jar cvfe hello.jar HelloWorld *
e 可以指定入口函数
* 当前目录下所有class文件
使用Dos命令打包遇到的坑:
- 找不到主类 (MF 修改不符合规范,或者MF中没有指定主类)
- Jni 异常 (这个没有找到原,后面会介绍规避方式)
- 不能访问类 (访问路径不对)
- Main 主类传值方式 (args可以接受一串参数,只要紧接着传值就可以了)
以上就是遇到的坑
最后使用Eclipse 进行 导出jar包,进行对比发现,使用dos 打的jar 和使用 Eclipse导出包生成的文件有些不同。
使用dos打包进行运行就会报异常找不到$之后的类(应该是内部类)
下面是使用eclipse 生的jar进行命令行打包结果(我的本意是对PackerNg进行优化研究)
异常列表
1.
2.
3.
Dos命令
jar cvfe hello.jar HelloWorld * 打jar包并且指定主类 HelloWorld
java –jar xxxx.jar //运行指定的jar包中的已经指定的主类,当然可以传递参数或者不传递参数
引用:
- http://blog.csdn.net/peerlessbloom/article/details/7039978 传参到主类
- http://blog.csdn.net/wangpeng047/article/details/7176024 打jar包
- http://www.cnblogs.com/bluestorm/archive/2012/09/24/2700486.html 打包
- https://github.com/mcxiaoke/packer-ng-plugin/blob/master/helper/src/main/java/com/mcxiaoke/packer/helper/PackerNg.java 测试的类