一、制作只含有字节码文件的jar包
1、只含一个.class
1)准备源文件 Hello.java
public class Hello {
public static void main(String[] args) {
System.out.println("hello");
}
}
2)javac编译,生成字节码
javac Hello.java
3)添加META-INF/MENIFEST.MF文件
Manifest-Version: 1.0
Main-Class: Hello
注意:后的空格
4)打包
jar -cvfm hello.jar META-INF\MENIFEST.MF Hello.class
5)运行jar文件
java -jar hello.jar
2、含有多个.class文件
1)准备源文件
Hello.java
public class Hello { public static void main(String[] args) { Say.speak(); } }
Say.java
public class Say { public static void speak() { System.out.println("hello"); } }
2)javac编译,生成字节码
javac Hello.java
3)添加META-INF/MENIFEST.MF文件
Manifest-Version: 1.0
Main-Class: Hello
4)打包
jar -cvfm hello.jar META-INF\MENIFEST.MF Hello.class Say.class
5)运行jar文件
java -jar hello.jar
3、多个类
如果多个类的话,javac Hello.java -d target 到target目录,打包时jar -cvfm hello.jar META-INF\MENIFEST.MF target
二、制作含有jar文件的jar包
1、调用jar外的jar输出hello
1)准备源文件
Say.java
public class Say { public static void speak() { System.out.println("hello"); } }
Hello.java
public class Hello { public static void main(String[] args) { Say.speak(); } }
2)编译
javac Say.class
3)打包say.jar
jar -cvf say.jar Say.class
4)编译Hello.java
javac -cp say.jar Hello.java
此种方式编译出来的Hello.class java无法执行
5)添加META-INF/MENIFEST.MF文件
Manifest-Version: 1.0
Main-Class: Hello
Class-Path: say.jar
6)打包hello.jar
jar -cvfm hello.jar META-INF/MENIFEST.MF Hello.class
7)运行hello.jar包
java -jar hello.jar