如何手工打jar包

发布时间 2023-05-26 00:26:20作者: fly_derek717

1. jar包和zip文件压缩包差不多的,唯一的就是多了一个叫manifest.mf(注意打包的时候要大写)的文件,这个叫做清单文件!清单文件用来指明我们打jar包的一些基本信息,最重要的是主区(Main Section)的四个属性:

  • Manifest-Version:1.0   版本号
  • Create-By:创建者,可以找一个jar包来写,或者根据公司来写
  • Main-Class:如果这个jar包可以通过java -jar去调用执行,这一项需要填写
  • Class-Path:类加载路径,引用其他的jar执行(在当前路径就直接写引用的jar包名字,如果不在当前路径,就要写全路径名),多个jar包用空格隔开
  • 注意:manifest.mf最后一定要有一行空格行,否则报错; 各个属性的冒号后必须要有一个空格

2. 在CMD命令行查看jar的常用选项,jar -help  常用的是-cvfm和-cvfe

3. 打包时,先打被依赖项,即B--->A,则先打包A,打包语句jar -cvf pa.jar com/gqgroup/learn/A.class

4. 然后准备MANIFEST.MF,填入一下内容

Manifest-Version: 1.0
Created-By: 1.8.0_121 (Oracle Corporation)
Class-Path: pa.jar
Main-Class: com.gqgroup.learn.B

 5. 将编译好的B.class和MANIFEST.MF,pa.jar,在同一个目录中执行jar -cvfm pb.jar MANIFEST.MF com/gqgroup/learn/B.class

 6. 执行打包的pb.jar包: java -jar pb.jar,结果如下:

 下面附上编译A.java和B.java的命令以及其源码(A和B类都是带包名编译的)

javac -encoding utf-8 -d . A.java

javac -cp pa.jar -encoding utf-8 -d . B.java

package com.gqgroup.learn;

public class A{
   public void sayHello(){
      System.out.println("hello world!");
   }
}
package com.gqgroup.learn;

import com.gqgroup.learn.A;

public class B{
   public static void main(String[] args){
      A a = new A();
      a.sayHello();
      System.out.println("i will learn package!");
   }
}