jar命令
.jar(Java Archive)是Java中的一种归档文件格式,只要安装了 JDK ,都可以使用 jar 命令将多个文件打包成一个 .jar 格式的 jar 包或者 war 包,就像 Linux 里的 tar 命令一样,以下为 jar 命令的参数:
1 | 用法: jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files ... |
查看jar包内容
1 | jar -tvf xx.jar |
解压jar/war文件
1 | 解压全部文件 |
打包jar/war文件
1 | 把当前目录的所有文件都打进去 |
manifest文件
打包时会默认创建mainifest.mf
文件,我们也可以选择不生成manifest.mf
文件,或者使用已有的manifest.mf
文件,特别是springboot
打包出来的jar包中,manifest.mf
包含很多扩展信息,我们必须要复用,否则会跑不起来。
1 | 不生成manifest.mf文件 |
manifest.mf
文件规范
- 不能有空行和空格的地方:第一行不可以是空行,行与行之间不能有空行,每行的行尾不可以有空格
- 一定要有空行的地方,最后一行得是空行
- 一定有空格的地方:key: value 在分号后面一定要写一个空格
- 每行不能超过七十多的字符
- Class-Path里边的内容用空格分隔而不是逗号或者分号
普通示例
1 | Manifest-Version: 1.0 |
springboot打包出来的manifest.mf文件示例
1 | Manifest-Version: 1.0 |
属性介绍
1 | Manifest-Version: |
替换jar包内文件
要想替换文件,在linux下可以把jar包解压,替换后再打成jar,麻烦。其实可以使用jar命令直接替换。
1 | 一定先建好目录结构com/test,然后把test.class文件放入test目录,再打包 |
注意:
test.class
文件一定要按其package声明,放到对应的目录层级下,然后再打包,否则打包后,其在jar包中的路径会与其package声明不一致,从而导致出错。
其他
1 | 编译时依赖其他jar包 |
反编译
1 | 只看方法声明 |