spring boot 自定义jar包(SpringCloud等Java项目打包为可执行jar包的两种方式)
目前,在实际的项目开发过程中,手动把我们的Springboot、SpringCloud项目打包为可执行jar包的场景确实不多了,但是有时候确实有这种需求的时候,还真的一下子想不起来要怎么做,所以在这里给大家介绍一下打包的方式。
有两种打包的方式:
- 项目运行依赖的所有jar都解析为class,打包进项目的可执行jar中
- 项目的可执行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配置文件:
- 启动类:
如有问题或者其它方式,欢迎大家评论区告诉我,谢谢!
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com