转载

SpringBoot项目jar包运行

前言

终于等来了假期,也终于等来了团队学习,考试周来的时候真的很慌张,不只是因为考试,更是因为团队学习的中断,学习就应该一鼓作气,趁着精力旺盛,也趁着自己兴趣在这,复习的时候就怕玩游戏,小游戏也不行,毕竟比起学习来,游戏要有很大的吸引力,对于团队学习来说,复习周就相当于休息,一旦时间过长,就容易被转移注意力,好在现在回到正轨了。

最近潘老师在Alice的项目上提交了一个这样的issue:

SpringBoot项目jar包运行

然后来到研究生考试系统看一下这个文件:

SpringBoot项目jar包运行

有一说一,没看懂,但是我感兴趣的是jar包,之前在团队汇报时就听说过这个名词,但是没有接触过,也不知道是啥,然后就试着打包和运行项目

打包

首先在POM.XML文件中要有插件:spring-boot-maven-plugin

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

然后就是进入POM.XML文件所在的目录,然后执行语句:

mvn clean package -Dmaven.test.skip=true

SpringBoot项目jar包运行

最后会出现

BUILD SUCCESS 字样,说明打包成功,然后在target文件中会生成jar包

SpringBoot项目jar包运行

由图标样式我们可以知道,所谓的jar包就是压缩包。

当然也可以使用命令:

mvn clean package

使用该命令后会进行测试,成功后打包文件。

运行项目

想要把项目运行起来,只需要一句:

java -jar alice-0.0.1-SNAPSHOT.jar

(后面的jar包请根据自己系统生成的jar包名称填写)

SpringBoot项目jar包运行

SpringBoot项目jar包运行

jar包

JAR 文件的全称 Java Archive File(Java 档案文件),通常 JAR 文件是一种压缩格式,和 ZIP 格式兼容,与 ZIP格式不同的是它 包含了一个名为 META-INF/MANIFEST.MF的清单文件

解压jar包看一下它的结构:

(现场演示)

MANIFEST.MF文件中有如下内容:

Manifest-Version: 1.0
Implementation-Title: alice
Implementation-Version: 0.0.1-SNAPSHOT
Built-By: jincheng
Implementation-Vendor-Id: com.yunzhiclub
Created-By: Apache Maven 3.6.0
Build-Jdk: 1.8.0_172
Implementation-URL: https://projects.spring.io/spring-boot/#/spring-bo
 ot-starter-parent/alice

关于创建者和版本号等信息。

打开实体文件,发现里面有如下文件:

SpringBoot项目jar包运行

结尾后缀均为.class

.class

Java字节码类文件(.class)是Java编译器编译Java源文件(.java)产生的“目标文件”。它是一种8位字节的二进制流文件, 各个数据项按顺序紧密的从前向后排列, 相邻的项之间没有间隙, 这样可以使得class文件非常紧凑, 体积轻巧, 可以被JVM快速的加载至内存, 并且占据较少的内存空间(方便于网络的传输)。

用jd-gui反向解析一下.class文件:

SpringBoot项目jar包运行

通过图标我们可以知道,正如上面说的,.class文件是二进制文件,变量和类型放在前面,方法放在后面

我们看一下College.class存放的东西:

javap -v College.class

javap命令主要用于反编译java的class文件

SpringBoot项目jar包运行

SpringBoot项目jar包运行

查看.class文件存放的二进制流信息并且了解他们的含义,请参考此博客:

深入理解JVM之Java字节码(.class)文件详解

总结

打包时,项目的.java文件经过编译器编译后生成.class文件,然后被打成压缩包,即jar包,当执行java -jar XXX.jar 命令时,java虚拟机再根据.class文件的内容进行编译。

SpringBoot项目jar包运行

本文作者: 河北工业大学梦云智开发团队 张文达

原文  https://segmentfault.com/a/1190000023179892
正文到此结束
Loading...