手动做一个可执行的jar包

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包

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 103,881评论 12 125
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 37,186评论 5 339
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 141,735评论 19 609
  • Do something everyday that you don't want to do, this is ...
    风中白桦阅读 42评论 0 0
  • 有人说夫妻性格要互补,比如一个快一个慢,这样可以中和出一个不快不慢的中间性格。有人说两个人要在节奏上能保持一致,一...
    Lola欢阅读 367评论 0 0