jar -h
非法选项: h
用法: jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
选项:
-c 创建新档案
-t 列出档案目录
-x 从档案中提取指定的 (或所有) 文件
-u 更新现有档案
-v 在标准输出中生成详细输出
-f 指定档案文件名
-m 包含指定清单文件中的清单信息
-n 创建新档案后执行 Pack200 规范化
-e 为捆绑到可执行 jar 文件的独立应用程序
指定应用程序入口点
-0 仅存储; 不使用任何 ZIP 压缩
-P 保留文件名中的前导 '/' (绝对路径) 和 ".." (父目录) 组件
-M 不创建条目的清单文件
-i 为指定的 jar 文件生成索引信息
-C 更改为指定的目录并包含以下文件
如果任何文件为目录, 则对其进行递归处理。
清单文件名, 档案文件名和入口点名称的指定顺序
与 'm', 'f' 和 'e' 标记的指定顺序相同。
示例 1: 将两个类文件归档到一个名为 classes.jar 的档案中:
jar cvf classes.jar Foo.class Bar.class
示例 2: 使用现有的清单文件 'mymanifest' 并
将 foo/ 目录中的所有文件归档到 'classes.jar' 中:
jar cvfm classes.jar mymanifest -C foo/ .
1、jar后面的{ctxui}[vfmn0PMe]在书写时不要加短横线-,只有-C可以用短横线-,否则会报错;
2、jar后面的{ctxui}[vfmn0PMe]不可以分开写,否则会报错;
3、{ctxui}这四个参数必须选其一,[vfmn0PMe]是可选参数,文件名也是必须的;
4、m 后面必须接指定的清单文件, M表示不创建清单文件;
5、清单文件名, 档案文件名和入口点名称的顺序,必须和'm', 'f' 和 'e' 标记的指定顺序相同;
6、-C 后接目录,表示只对目录下的文件进行打包, -C 目录/ . 其中点.表示目录下任何文件,如果想打包目录下的指定某些文件,则需要一一列出文件的全路径名称;
7、不使用-C时,jar指令后需要列出需要打包的文件;
8、files ... 代表一个文件或多个文件;
9、e 指定可运行jar包的入口点,该入口点必须是全路径名,比如com.crland.Welcome;
package com.crland;
public class Welcome {
public static void main(String[] args) {
Teacher.greeting();
}
}
package com.crland;
public class Teacher {
public static void greeting() {
System.out.println("welcome xiaoliu");
}
}
编译源文件需要使用javac命令,首先进入到工程目录,然后使用javac命令:
E:\codes\idea\HelloCode\testjar> javac -d out -sourcepath src .\src\main\java\com\crland\Teacher.java .\src\main\java\com\crland\Welcome.java
命令执行完后,会在out目录下生成class类文件
可以看到,生成的class文件也是按照原有的包目录的组织的。
先简单看下javac命令的用法:
用法: javac
E:\codes\idea\HelloCode\testjar> jar vcfe test1.jar com.crland.Welcome -C out/ .
已添加清单
正在添加: com/(输入 = 0) (输出 = 0)(存储了 0%)
正在添加: com/crland/(输入 = 0) (输出 = 0)(存储了 0%)
正在添加: com/crland/Teacher.class(输入 = 413) (输出 = 293)(压缩了 29%)
正在添加: com/crland/Welcome.class(输入 = 322) (输出 = 237)(压缩了 26%)
打包结果如下:
把test1.jar复制到其他目录,然后使用java命令运行jar包,可执行:
C:\Users\liuqinhou\Desktop\test> java -jar .\test1.jar
welcome xiaoliu
可以看到,jar包执行成功了。
注意点:
1、fe参数的顺序需要和test1.jar com.crland.Welcome的顺序保持一致才行。
2、最后的点.表示要打包out目录下所有文件
E:\codes\idea\HelloCode\testjar> jar vcfe test2.jar com.crland.Welcome -C out/ com/crland/Welcome.class
上面指令就是只打包out/目录下的com/crland/Welcom.class文件,打包结果为: