美文网首页程序员java
手动做一个可执行的jar包

手动做一个可执行的jar包

作者: 坏淡一个 | 来源:发表于2017-10-12 10:26 被阅读286次

SpringBoot项目可以直接打成jar包,发布到服务器上,通过java -jar命令执行,发布运行一个服务端的项目非常方便。
那SpringBoot的jar包是如何运行起来的呢?先手动做一个可执行的jar包吧

目录结构

image.png

程序代码

package com.compile.demo.bean;

public class Student {
    private String name;

    public Student(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}
package com.compile.demo;

import com.compile.demo.bean.Student;
import org.apache.commons.lang3.StringUtils;

public class Main {
    public static void main(String[] args) {
        String str = "Hello ";
        Student s = new Student("zhangsan");
        if (StringUtils.isNotEmpty(str)) {
            System.out.println(str + s.getName());
        } else {
            System.out.println("为空!");
        }
    }
}

手动编译

  1. 执行: javac -encoding utf-8 -Djava.ext.dirs=libs -d classes src\com\compile\demo\*.java src\com\compile\demo\bean\*.java
  2. 当前目录结构:
    image.png
    手动编译的详细过程请参照:手动编译及执行java类(包含并引用第三方jar)

打jar包

  1. 创建MANIFEST.MF文件
Manifest-Version: 1.0
Main-Class: com.compile.demo.Main
Class-Path: commons-lang3-3.4.jar

请务必在文件的最后一行,至少加一个回车换行

  • Manifest-Version 版本号默认为1.0
  • Main-Class 入口的主类,也就是main方法所在的类
  • Class-Path 引用外部类的路径
  1. 再将手动编译的.class文件和引用的commons-lang3-3.4.jar移动到与MANIFEST.MF同一个目录下


    image.png
  2. 打包
    在该文件夹下执行:jar -cvfm compile.jar MANIFEST.MF com commons-lang3-3.4.jar
  • jar命令是jdk自带的,可在%JAVA_HOME%\bin中找到
  • c 创建新档案
  • v 在标准输出中生成详细输出,有输出信息
  • f 指定档案文件名
  • m 包含指定清单文件中的清单信息,也就是指定我们的MANIFEST.MF 如果没有这个参数,会生成一个默认的MANIFEST.MF文件
  • compile.jar 指定生成jar包的名称
  • MANIFEST.MF com commons-lang3-3.4.jar 要打包的文件
    成功之后会在当前文件夹下生成一个compile.jar


    image.png
  1. 运行
    执行:java -jar compile.jar
    输出结果:Hello zhangsan

jar包结构

可借助IntelliJ IDEA来查看,图形化的结构看起来更清晰


image.png

根目录下是

  • com 就是我们的.class文件
  • commons-lang3-3.4.jar 依赖的外部jar包
  • META-INF 放着MANIFEST.MF,这个文件不可少,文件的内容也不能随意改动


    image.png

    可以看出,文件内容与我们打包之前的基本没有变化,只是多了一个Created-By
    执行java -jar命令时,就是根据Main-Class找到程序的入口,通过Class-Path找到依赖的外部jar包

相关文章

网友评论

    本文标题:手动做一个可执行的jar包

    本文链接:https://www.haomeiwen.com/subject/rfhwyxtx.html