1简介
在出差的过程中,在项目执行的初期,由于需要给客户提供一个可执行的程序,由于当时时间的缘故,采用了提供jar包的形式,因为jar包只要通过
java -jar ***.jar
就可以作为一个独立的程序,可以让其他的程序进行调用服务。现在简单的介绍这个jar包的制作过程和jar包中的结构。
2Jar包制作
可参考博客 Springboot项目(包含第三方jar包)打成jar包方法,
2.1项目结构和jar包制作过程
- 项目结构如下:
- jar包制作过程
2.2pom.xml修改位置
2.2.1pom中待修改位置
修改位置如下图所示:
2.2.2项目发布形式修改为jar
<packaging>jar</packaging>
2.2.2编译时包含第三方lib
其中如果要制作jar,需要在< plugins >中添加maven插件maven-compiler-plugin,具体的代码如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<skip>true</skip>
<encoding>UTF-8</encoding>
<compilerArguments>
<extdirs>${project.basedir}/src/main/resources/lib</extdirs>
</compilerArguments>
</configuration>
</plugin>
否则在执行maven package时会提示编译时找不到导入的第三方包中相关类的.
2.2.3打包时打入BOOT-INF/lib
<!-- 主要配置:将引用的第三方 jar 包打进生成的 jar 文件的 BOOT-INF/lib 目录中 -->
<resources>
<resource>
<directory>src\main\resources\lib</directory>
<targetPath>BOOT-INF\lib</targetPath>
<!-- <includes>
<include>**/*.jar</include>
</includes>-->
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
这样在打包时首先执行clean,然后执行package即可完成jar包制作。
3 Jar包结构分析
3.1 jar包目录结构
把jar包使用好压解压之后可以看到jar包中的目录结构如下:
3.2 META-INF
在META-INF目录中有三个较为重要的文件,pom.xml和pom.properties和与maven同级的MANIFEST.MF,其中pom.xml即项目对应的pom.xml,
3.2.1 pom.properties
#Created by Apache Maven 3.3.9
version=0.0.1-SNAPSHOT
groupId=com.cetc52
artifactId=platform
对应了项目的三个坐标。
3.2.2 MANIFEST.MF
Manifest-Version: 1.0
Implementation-Title: platform
Implementation-Version: 0.0.1-SNAPSHOT
Built-By: lenovo
Implementation-Vendor-Id: com.cetc52
Spring-Boot-Version: 2.0.3.RELEASE
Main-Class: org.springframework.boot.loader.JarLauncher
Start-Class: com.cetc52.platform.PlatformApplication
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_131
Implementation-URL: https://projects.spring.io/spring-boot/#/spring-bo
ot-starter-parent/platform
关于Main-Class和Start-Class参见spring boot应用启动原理分析
3.3 BOOT-INF
在BOOT-INF中lib目录包含了Maven的jar依赖和第三方导入的jar依赖,这样才能顺利的运行该jar。classes目录则包含了全量的程序员编写的类对应的class文件。其中在BOOT-INF/classes目录中包含配置文件application.properties,该文件记录了项目的配置信息,如果是打成了war包,则可以直接修改该配置文件,重启tomcat即可修改相关的配置。
4总结
博客简要的说明了jar包制作的过程,并且简单阐述了jar包中各个目录中的内容和含义。通过把程序制作成jar包,也可以熟悉其他jar包中的结构和框架,对于加深java程序的理解是很有帮助的,实践是检验真理的唯一标准,动手制作个jar包就能理解许多不理解的东西了。加油。