转载

如何把Java文件打包为Jar文件

通过本文了解一下从 Java 文件生成可执行的 jar 文件的过程

java 到 jar

所有文件在一个包下

在同一个包 src 下有下面两个类

  • People
public class People {
    private String name;
    private int age;

    public People(String name,int age) {
        this.name = name;
        this.age = age;
    }

    public void print() {
        System.out.println("people : "+this.name+","+this.age);
    }
}
  • Main
public class Main {
    public static void main(String[] args) {
        System.out.println("hello world");
        People people = new People("mike",22);
        people.print();
    }
}

命令行执行 javac .java 后会生成对应的 .class 文件,然后执行 * java Main** 输出:

hello world
people : mike,22

为了保持代码的整洁,可以使用 javac -d xxx -d 参数指定生成的 class 文件的位置。

为了方便,可以把 class 打成 jar 文件,方便运行。

jar 文件生成

准备一个 manifest.txt 文件,需要以下内容

Main-Class: Main

Main 即包含 main 方法的那个类

Main 和冒号之前一定要有空格,Main 后面一定要有换行

manifest.txt 最好和 Main 这个 class 文件在同一目录下

然后执行命令:

jar -cvmf mainfest.txt app.jar *.class

可以简单看一下 jar 这个命令的帮助文档

jar --help
用法: 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/ .

这里 有一点非常重要的是 : m f 这两个指令的顺序要和后面

清单文件名和归档文件名的顺序保持一致。切记,切记。

即可生成一个可执行的 jar 文件,执行命令 java -jar app.jar 输出结果:

hello world
people : mike,22
jar -tf xxx.jar 可以查看 jar 文件内容
jar -xf xxx.jar 可以解压 jar 文件

java 文件在不同的包中

上面是理想的情况,所有类在一个文件夹下(包)下,但是这是很少见的,为了代码规范及防止包名冲突等原因,一般情况下我们都会分包,根据业务或代码架构的层级会把 java 文件放到不同的包里。因此生成的 class 文件也在不同的包里。

原文  https://rebooters.github.io/2019/09/12/如何把Java文件打包为Jar文件/
正文到此结束
Loading...