maven快速生成SpringBoot打包文件的方法步驟
最近在部署基于SpringBoot開發(fā)的項(xiàng)目時(shí),由于微服務(wù)較多,本地工程編譯后只得出一個(gè)JAR包,部署起來實(shí)在不方便,因此總想著怎么偷偷懶,執(zhí)行一次命令編譯出整個(gè)部署的文件。先說結(jié)果,最后期望打包的目錄如下:
各個(gè)目錄或文件說明如下:
bin:包含程序啟動(dòng)和停止的兩個(gè)腳本,后臺(tái)運(yùn)行腳本
cert:程序運(yùn)行過程中使用的一些證書
config:各種配置文件
logs:運(yùn)行日志
kafka-roma.jar:主程序
run.bat:windows下運(yùn)行腳本
run.sh:linux下運(yùn)行腳本,非后臺(tái)腳本
先上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>
下面逐一說明打包的各個(gè)plugin,對(duì)打包輸出關(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等方式部署,方便后期生成鏡像,可以刪除這個(gè)節(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>
**表示多級(jí)子目錄,*表示一級(jí)子目錄
<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>
這個(gè)配置會(huì)將你的應(yīng)用程序打包成一個(gè)可執(zhí)行的 JAR 文件,包含了所有依賴項(xiàng)。mainClass為JAR包中的啟動(dòng)類。
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)需要編譯出部署包時(shí),執(zhí)行maven clean package -f pom1.xml即可。
到此這篇關(guān)于maven快速生成打包文件的方法步驟的文章就介紹到這了,更多相關(guān)maven 生成打包文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java API方式調(diào)用Kafka各種協(xié)議的方法
本篇文章主要介紹了Java API方式調(diào)用Kafka各種協(xié)議的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09java報(bào)錯(cuò)之springboot3+vue2項(xiàng)目web服務(wù)層報(bào)錯(cuò)總結(jié)
java入門學(xué)習(xí),隨手記錄一下開發(fā)過程中產(chǎn)生的報(bào)錯(cuò),有些錯(cuò)誤是網(wǎng)上搜索再加上自己嘗試,隨手引用了一些其他人的記錄,也是留給自己看的,或是希望能對(duì)其他初學(xué)者有幫助2023-06-06SpringBoot實(shí)現(xiàn)文件下載的限速功能
在SpringBoot項(xiàng)目中,實(shí)現(xiàn)文件下載的限速功能可以有效控制服務(wù)器帶寬的占用,并防止單個(gè)用戶消耗過多的資源,本文將通過具體的代碼示例和詳細(xì)的流程解釋,介紹如何在SpringBoot項(xiàng)目中實(shí)現(xiàn)文件下載的限速功能,需要的朋友可以參考下2024-07-07java基礎(chǔ)知識(shí)之FileInputStream流的使用
這篇文章主要介紹了java基礎(chǔ)知識(shí)之FileInputStream流的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12MyBatis-Plus實(shí)現(xiàn)對(duì)查詢結(jié)果進(jìn)行分頁的基本步驟
MyBatis-Plus 是一個(gè) MyBatis 的增強(qiáng)工具,在 MyBatis 的基礎(chǔ)上只做增強(qiáng)不做改變,為簡化開發(fā)、提高效率而生,MyBatis-Plus 支持多種數(shù)據(jù)庫的分頁查詢,其分頁功能是通過 Page 類實(shí)現(xiàn)的,本文介紹了使用 MyBatis-Plus 實(shí)現(xiàn)分頁查詢的基本步驟,需要的朋友可以參考下2024-08-08java9學(xué)習(xí)系列之在docker中如何運(yùn)行java9
最近在學(xué)習(xí)java9,所以將學(xué)習(xí)中遇到的一些知識(shí)點(diǎn)分享給大家,下面這篇文章主要給大家介紹了java9學(xué)習(xí)系列之在docker中如何運(yùn)行java9的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。2017-09-09探討:使用httpClient在客戶端與服務(wù)器端傳輸對(duì)象參數(shù)的詳解
本篇文章是對(duì)使用httpClient在客戶端與服務(wù)器端傳輸對(duì)象參數(shù)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06