javac -Djava.ext.dirs=./lib -d classes Test.java 注:./lib为包含lib目录下面的所有jar包,-d是生成的class文件目录,Test.java即为测试代码。
类似的,java -Djava.ext.dirs=./lib Test 也可以用-cp=classpath
jar -tvf *.jar 查看jar包目录结构
jar示例:
vim testjar/Test.java
package testjar;
public class Test{
public static void main(String[] args){
System.out.println("hello jar");
}
}
jar -cvf test.jar testjar 将testjar文件夹中文件打包
jar -tvf test.jar 查看目录结构
jar -xvf test.jar 解压到当前目录
java -cp test.jar testjar.Test
改写MANIFEST.MF,使java运行代码简化
vim META-INF/MANIFEST.MF
Manifest-Version:1.0
Created-By: ...
Main-Class: testjar.Test
将修改后的文件传入test.jar
jar -cvfm test.jar META-INF/MANIFEST.MF testjar
运行:java -jar test.jar
manifest.mf的部分清单
Manifest-Version: 1.0
Created-By: 1.5.0_07 (Sun Microsystems Inc.)
Main-Class: testjar.Test
Specification-Title: jartest
Specification-Version: 1.1
Specification-Vendor: example.com
Implementation-Title: jartest
Implementation-Version: 1.1
Implementation-Vendor: example.com
MANIFEST.MF中的内容可以用下面程序读取:
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.jar.JarFile;
import java.util.jar.Manifest;
public class GetAttributes {
public static void main(String[] args) {
try {
//test.jar 由上述 manifest.mf生成
JarFile jf = new JarFile("D:\\code\\work\\test.jar");
Manifest mf = jf.getManifest();
Map m = mf.getMainAttributes();
Set s = m.entrySet();
Iterator it = s.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}