背景:
最近看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导出包生成的文件有些不同。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SNxEDN1YzMxIWO4UWN4QjNzYzX0IDNyETM0AzLcFTMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
使用dos打包进行运行就会报异常找不到$之后的类(应该是内部类)
下面是使用eclipse 生的jar进行命令行打包结果(我的本意是对PackerNg进行优化研究)
异常列表
1.
2.
3.
Dos命令
jar cvfe hello.jar HelloWorld * 打jar包并且指定主类 HelloWorld
- https://github.com/mcxiaoke/packer-ng-plugin/blob/master/helper/src/main/java/com/mcxiaoke/packer/helper/PackerNg.java 测试的类