在当前目录下创建文件 HelloWorld.java ,内容如下:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("你好,乐天笔记");
}
}
编译:
$ javac HelloWorld.java
查看 class 文件:
$ ls
HelloWorld.class HelloWorld.java
打包到 jar:
$ jar cvf hello.jar HelloWorld.class
已添加清单
正在添加: HelloWorld.class(输入 = 435) (输出 = 319)(压缩了 26%)
此时当前目录会出现 hello.jar:
$ ls
HelloWorld.class HelloWorld.java hello.jar
执行 hello.jar 中的 HelloWorld 类:
$ java -cp hello.jar HelloWorld
你好,乐天笔记
若直接用-jar
执行 hello.jar 会报错:
$ java -jar hello.jar
hello.jar中没有主清单属性
todo.
当前目录下文件结构:
$ tree
.
└── com
└── letianbiji
└── example
├── HelloWorld.java
└── Util.java
Util.java 内容:
package com.letianbiji.example;
public class Util {
public static int add(int a, int b) {
return a + b;
}
}
HelloWorld.java 内容如下:
package com.letianbiji.example;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("1+2=" + Util.add(1, 2));
}
}
编译 java 代码:
$ javac com/letianbiji/example/Util.java
$ javac com/letianbiji/example/HelloWorld.java
查看编译结果:
$ tree
.
└── com
└── letianbiji
└── example
├── HelloWorld.class
├── HelloWorld.java
├── Util.class
└── Util.java
打jar包方式1:
$ jar cvf hello.jar com/letianbiji/example/Util.class com/letianbiji/example/HelloWorld.class
已添加清单
正在添加: com/letianbiji/example/Util.class(输入 = 261) (输出 = 209)(压缩了 19%)
正在添加: com/letianbiji/example/HelloWorld.class(输入 = 705) (输出 = 426)(压缩了 39%)
打jar包方式2:
$ jar cvf hello.jar **/*.class
已添加清单
正在添加: com/letianbiji/example/HelloWorld.class(输入 = 705) (输出 = 426)(压缩了 39%)
正在添加: com/letianbiji/example/Util.class(输入 = 261) (输出 = 209)(压缩了 19%)
查看 hello.jar 结构:
$ jar tf hello.jar
META-INF/
META-INF/MANIFEST.MF
com/letianbiji/example/HelloWorld.class
com/letianbiji/example/Util.class
执行 HelloWorld 类:
$ java -cp hello.jar com.letianbiji.example.HelloWorld
1+2=3
( 本文完 )