spring boot 自定义jar包

信息发布 (3) 3小时前

目前,在实际的项目开发过程中,手动把我们的Springboot、SpringCloud项目打包为可执行jar包的场景确实不多了,但是有时候确实有这种需求的时候,还真的一下子想不起来要怎么做,所以在这里给大家介绍一下打包的方式。

spring boot 自定义jar包_http://www.zhaochafa.com_信息发布_第1张

有两种打包的方式:

  1. 项目运行依赖的所有jar都解析为class,打包进项目的可执行jar中
  2. 项目的可执行jar包和项目运行依赖的jar分开,项目运行依赖的jar都放进lib文件夹中,此时需要注意的是:运行项目时,需要把可执行jar和lib放在同目录下。

本文用来举例子使用的是Springboot项目,名称为yl-nacos-provider,是在我的前面几篇文章中构建起来的。代码很简单,是Nacos服务注册与发现基本使用的Demo。如果有需要的话,请回看:Docker下的Nacos:服务注册与发现。当然,不回看之前的文章,我相信大家在阅读本文的内容时也不会有什么障碍。

简单说明一下yl-nacos-provider包含的内容:

  • 添加了在Nacos中注册服务
  • 提供了一个简单的Controller接口

关于这个项目的主要内容,我会在文章最后放上重点部分的截图和代码。

方式一:项目运行依赖的所有jar都解析为class,打包进项目的可执行jar中

在pom.xml文件中添加如下代码:

<plugin>
<groupId>org.apache.Maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-5</version>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<finalName>nacos-provider-0.0.1-SNAPSHOT</finalName>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<addclasspath>true</addClasspath>
<mainClass>orj.lirj.nacos.nacosprovider.NacosProviderApplication</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>assembly</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.Springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>

特别说明:

finalName:需要改成你项目打包后的文件名称

mainClass:需要改成你项目的启动类

添加后完整的pom.xml文件代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.yl.springcloudyldemo</groupId>
<artifactId>spring-cloud-yl-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>org.yl.nacosprovider</groupId>
<artifactId>yl-nacos-provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>yl-nacos-provider</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.yl.springcloudyldemocommon</groupId>
<artifactId>spring-cloud-yl-demo-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-5</version>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<finalName>yl-nacos-provider-0.0.1-SNAPSHOT</finalName>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>org.yl.nacosprovider.ylnacosprovider.YlNacosProviderApplication</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>assembly</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

</project>

我们可以使用命令mvn package或者使用idea里右侧自带的Maven工具进行打包。

idea自带的Maven工具

打包后的jar在target目录下:

我们使用java -jar yl-nacos-provider-0.0.1-SNAPSHOT.jar命令启动打包好的jar包:

图1

图2

由于日志比较多,一张图截图不下,所以分了两张。出现图2标红部分,说明我们的项目启动成功了。

访问一下我们的Controller接口:localhost:9101/ylnacos/provider/hello?name=测试名称

方式二:项目的可执行jar包和项目运行依赖的jar分开,项目运行依赖的jar都放进lib文件夹中

在pom.xml文件中添加如下代码:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>org.yl.nacosprovider.ylnacosprovider.YlNacosProviderApplication</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<id>copy</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>
${project.build.directory}/lib
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>

特别说明:

mainClass:需要改成你项目的启动类

添加后完整的pom.xml文件代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.yl.springcloudyldemo</groupId>
<artifactId>spring-cloud-yl-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>org.yl.nacosprovider</groupId>
<artifactId>yl-nacos-provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>yl-nacos-provider</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.yl.springcloudyldemocommon</groupId>
<artifactId>spring-cloud-yl-demo-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>org.yl.nacosprovider.ylnacosprovider.YlNacosProviderApplication</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<id>copy</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>
${project.build.directory}/lib
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

</project>

我们可以使用命令mvn package或者使用idea里右侧自带的Maven工具(截图见方式一里)进行打包。

打包后的jar在target目录下:

在这种方式下,我们会发现,在target下出现了一个lib的文件夹。

特别说明:我们的jar的运行离不开这个lib文件夹,我们必须把我们的jar和这个lib放在同一级目录下才可以。

我们使用java -jar yl-nacos-provider-0.0.1-SNAPSHOT.jar命令启动打包好的jar包。

访问一下我们的Controller接口:localhost:9101/ylnacos/provider/hello?name=测试名称222

报错说明:

  • 在方式一中,需要在pom中图3的代码,如果没有的话,会报图4的错误

图3

图4

yl-nacos-provider重点代码截图

  • Controller接口:
  • application.yml配置文件:
  • 启动类:

如有问题或者其它方式,欢迎大家评论区告诉我,谢谢!

发表回复