maven快速生成SpringBoot打包文件的方法步驟
最近在部署基于SpringBoot開發(fā)的項(xiàng)目時,由于微服務(wù)較多,本地工程編譯后只得出一個JAR包,部署起來實(shí)在不方便,因此總想著怎么偷偷懶,執(zhí)行一次命令編譯出整個部署的文件。先說結(jié)果,最后期望打包的目錄如下:

各個目錄或文件說明如下:
bin:包含程序啟動和停止的兩個腳本,后臺運(yùn)行腳本
cert:程序運(yùn)行過程中使用的一些證書
config:各種配置文件
logs:運(yùn)行日志
kafka-roma.jar:主程序
run.bat:windows下運(yùn)行腳本
run.sh:linux下運(yùn)行腳本,非后臺腳本
先上pom1.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>
<groupId>org.example</groupId>
<artifactId>kafka-roma</artifactId>
<version>1.0</version>
<name>kafka-roma</name>
<description>kafka-roma</description>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.6.13</spring-boot.version>
<maven.test.skip>true</maven.test.skip>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>2.7.2</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.52</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<finalName>${project.artifactId}</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>*.properties</exclude>
<exclude>*.yml</exclude>
<exclude>*.xml</exclude>
</excludes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<mainClass>org.example.roma.KafkaRomaApplication</mainClass>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy-resources</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>*.properties</include>
<include>*.yml</include>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
<outputDirectory>${project.build.directory}/roma/config/</outputDirectory>
</configuration>
</execution>
<execution>
<id>copy-resources1</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>src/main/bin</directory>
<includes>
<include>start.sh</include>
<include>stop.sh</include>
</includes>
</resource>
</resources>
<outputDirectory>${project.build.directory}/roma/bin/</outputDirectory>
</configuration>
</execution>
<execution>
<id>copy-resources2</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>src/main/bin</directory>
<includes>
<include>run.sh</include>
<include>run.bat</include>
</includes>
</resource>
</resources>
<outputDirectory>${project.build.directory}/roma/</outputDirectory>
</configuration>
</execution>
<execution>
<id>copy-resources3</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>cert</directory>
<includes>
<include>*.jks</include>
<include>*.crt</include>
</includes>
</resource>
</resources>
<outputDirectory>${project.build.directory}/roma/cert/</outputDirectory>
</configuration>
</execution>
<execution>
<id>copy-resources4</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>${project.build.directory}</directory>
<includes>
<include>*.jar</include>
</includes>
</resource>
</resources>
<outputDirectory>${project.build.directory}/roma/</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
下面逐一說明打包的各個plugin,對打包輸出關(guān)鍵看build節(jié)點(diǎn),finalName確定最后輸出jar包的名字,這里采用project.artifactId,因此輸出的文件名為kafka-roma.jar。
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>*.properties</exclude>
<exclude>*.yml</exclude>
<exclude>*.xml</exclude>
</excludes>
</resource>
</resources>
這里主要控制不要把src/main/resources目錄下properties、xml、yml等配置文件打包到JAR中,由于后面考慮方便修改配置文件,因此沒有將配置文件打包到JAR中,如果采用DOCKER等方式部署,方便后期生成鏡像,可以刪除這個節(jié)點(diǎn)。如果該目錄下有子目錄中的相關(guān)的文件也不想打包到JAR中,修改如下
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>**/*.properties</exclude>
<exclude>**/*.yml</exclude>
<exclude>**/*.xml</exclude>
</excludes>
</resource>
</resources>
**表示多級子目錄,*表示一級子目錄
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<mainClass>org.example.roma.KafkaRomaApplication</mainClass>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
這個配置會將你的應(yīng)用程序打包成一個可執(zhí)行的 JAR 文件,包含了所有依賴項(xiàng)。mainClass為JAR包中的啟動類。
maven-resources-plugin主要拷貝各類文件
<execution>
<id>copy-resources</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>*.properties</include>
<include>*.yml</include>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
<outputDirectory>${project.build.directory}/roma/config/</outputDirectory>
</configuration>
</execution>
拷貝配置文件到config目錄下
<execution>
<id>copy-resources1</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>src/main/bin</directory>
<includes>
<include>start.sh</include>
<include>stop.sh</include>
</includes>
</resource>
</resources>
<outputDirectory>${project.build.directory}/roma/bin/</outputDirectory>
</configuration>
</execution>
拷貝運(yùn)行腳本到bin目錄下
<execution>
<id>copy-resources2</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>src/main/bin</directory>
<includes>
<include>run.sh</include>
<include>run.bat</include>
</includes>
</resource>
</resources>
<outputDirectory>${project.build.directory}/roma/</outputDirectory>
</configuration>
</execution>
拷貝調(diào)試腳本到根目錄下
<execution>
<id>copy-resources3</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>cert</directory>
<includes>
<include>*.jks</include>
<include>*.crt</include>
</includes>
</resource>
</resources>
<outputDirectory>${project.build.directory}/roma/cert/</outputDirectory>
</configuration>
</execution>
拷貝證書文件到根目錄下
<execution>
<id>copy-resources4</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>${project.build.directory}</directory>
<includes>
<include>*.jar</include>
</includes>
</resource>
</resources>
<outputDirectory>${project.build.directory}/roma/</outputDirectory>
</configuration>
</execution>
拷貝JAR到根目錄下。
當(dāng)需要編譯出部署包時,執(zhí)行maven clean package -f pom1.xml即可。
到此這篇關(guān)于maven快速生成打包文件的方法步驟的文章就介紹到這了,更多相關(guān)maven 生成打包文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java API方式調(diào)用Kafka各種協(xié)議的方法
本篇文章主要介紹了Java API方式調(diào)用Kafka各種協(xié)議的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-09-09
java報(bào)錯之springboot3+vue2項(xiàng)目web服務(wù)層報(bào)錯總結(jié)
java入門學(xué)習(xí),隨手記錄一下開發(fā)過程中產(chǎn)生的報(bào)錯,有些錯誤是網(wǎng)上搜索再加上自己嘗試,隨手引用了一些其他人的記錄,也是留給自己看的,或是希望能對其他初學(xué)者有幫助2023-06-06
SpringBoot實(shí)現(xiàn)文件下載的限速功能
在SpringBoot項(xiàng)目中,實(shí)現(xiàn)文件下載的限速功能可以有效控制服務(wù)器帶寬的占用,并防止單個用戶消耗過多的資源,本文將通過具體的代碼示例和詳細(xì)的流程解釋,介紹如何在SpringBoot項(xiàng)目中實(shí)現(xiàn)文件下載的限速功能,需要的朋友可以參考下2024-07-07
java基礎(chǔ)知識之FileInputStream流的使用
這篇文章主要介紹了java基礎(chǔ)知識之FileInputStream流的使用,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12
MyBatis-Plus實(shí)現(xiàn)對查詢結(jié)果進(jìn)行分頁的基本步驟
MyBatis-Plus 是一個 MyBatis 的增強(qiáng)工具,在 MyBatis 的基礎(chǔ)上只做增強(qiáng)不做改變,為簡化開發(fā)、提高效率而生,MyBatis-Plus 支持多種數(shù)據(jù)庫的分頁查詢,其分頁功能是通過 Page 類實(shí)現(xiàn)的,本文介紹了使用 MyBatis-Plus 實(shí)現(xiàn)分頁查詢的基本步驟,需要的朋友可以參考下2024-08-08
java9學(xué)習(xí)系列之在docker中如何運(yùn)行java9
最近在學(xué)習(xí)java9,所以將學(xué)習(xí)中遇到的一些知識點(diǎn)分享給大家,下面這篇文章主要給大家介紹了java9學(xué)習(xí)系列之在docker中如何運(yùn)行java9的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。2017-09-09
探討:使用httpClient在客戶端與服務(wù)器端傳輸對象參數(shù)的詳解
本篇文章是對使用httpClient在客戶端與服務(wù)器端傳輸對象參數(shù)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06

