jar命令
常用的选项:
- c - 创建一个jar包
- t - 列出jar包中的文件
- x - 从jar包提取指定的(或全部的)文件
- u - 向已存在的jar包中添加文件
- f - 指定jar包的文件名
- m - 从指定的manifest文件获取清单信息
- e - 指定应用程序的入口(主类的完全限定名称),用于生成可执行jar包
- 0 - 只归档,不压缩
- M - 不创建清单文件(也就是“META-INF/MANIFEST.MF”)
- i - 为指定的jar包生成索引文件(也就是“META-INF/INDEX.LIST”),比如
jar i test.jar
- -C dir - 先cd到dir,再执行jar命令
需要特别说明的是:
1,如果指定了目录,那么会递归的处理
2,清单文件名、归档文件名(也就是jar包的名称)、入口点名称应该和m、f、e标记按照相同的次序指定
MANIFEST.MF
一个例子:
Manifest-Version: 1.0
Main-Class: test.Main
Class-Path: ./ ./lib/commons-collections-3.2.jar ./lib/commons-dbcp-1.2.2.jar
./lib/commons-lang-2.3.jar ./lib/commons-logging-1.1.jar
- Manifest-Version - MF文件的版本
- Main-Class - 应用程序的入口也就是主类的完全限定名称
- Class-Path - 应用程序或类加载器使用该值来构造内部的类搜索路径
MF文件格式的一些注意事项:
- 每行最长72个字符,如果超出,则需要续行
- 总是以Manifest-Version开头
- 确认每行都以回车结束,否则该行将会被忽略
- 如果Class-Path 中的存在路径,使用"/"分隔目录,与平台无关
关于Class-Path头:
- 运行java命令时,如果使用了-jar选项,那么通过环境变量CLASSPATH 和 命令行指定的所有类搜索路径都会被JVM忽略
- 在Class-Path头中只能指定jar包,指定的目录是无效的
在Class-Path的值包含多行时:
- jar包之间用空格分隔
- 每行的最后一个jar包的名称后不容许有空格
- 除了第一行,每行的开头必须有不少于2个空格
- 最后一行要回车换行,但不能有空格