天天看点

使用CMD命令行打 jar包

背景:

最近看packetNg 打包插件,遇到一个问题,编码的问题导致打出来的渠道包,乱码问题,虽然已经解决了,但是还是想吧过程分享一下

有几个重点:

1. DOS 窗口 Java -jar 打jar包命令

2. 如果要直接运行jar 包中的类,需要自行修改META-INF中 MF 文件内容(修改MF 文件需要符合MF 文件的格式 需要在最后空两行否则出现异常 没有找到主类),当然网上很多都是二次打包,而且容易出错,有一种直接可以指定MAIN-CLASS 的方法。

jar cvfe hello.jar HelloWorld *

e 可以指定入口函数

* 当前目录下所有class文件

使用Dos命令打包遇到的坑:

  1. 找不到主类 (MF 修改不符合规范,或者MF中没有指定主类)
  2. Jni 异常 (这个没有找到原,后面会介绍规避方式)
  3. 不能访问类 (访问路径不对)
  4. Main 主类传值方式 (args可以接受一串参数,只要紧接着传值就可以了)

以上就是遇到的坑

最后使用Eclipse 进行 导出jar包,进行对比发现,使用dos 打的jar 和使用 Eclipse导出包生成的文件有些不同。

使用CMD命令行打 jar包

使用dos打包进行运行就会报异常找不到$之后的类(应该是内部类)

下面是使用eclipse 生的jar进行命令行打包结果(我的本意是对PackerNg进行优化研究)

使用CMD命令行打 jar包

异常列表

1.

使用CMD命令行打 jar包

2.

使用CMD命令行打 jar包

3.

使用CMD命令行打 jar包

Dos命令

jar cvfe hello.jar HelloWorld * 打jar包并且指定主类 HelloWorld

  1. ​​https://github.com/mcxiaoke/packer-ng-plugin/blob/master/helper/src/main/java/com/mcxiaoke/packer/helper/PackerNg.java​​ 测试的类