欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

springboot-assembly自定義打包全過(guò)程

 更新時(shí)間:2023年06月20日 09:25:31   作者:阿拉的夢(mèng)想  
這篇文章主要介紹了springboot-assembly自定義打包全過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

springboot-assembly自定義打包

我們打包項(xiàng)目的時(shí)候,一般只會(huì)打出一個(gè)可執(zhí)行jar。有時(shí),這個(gè)jar需要附帶啟動(dòng)腳本或外置配置文件。此時(shí)就可以使用assembly自定義打包。

使用場(chǎng)景:按照自己的需求將需要的文件打包到自己指定的目錄。

配置maven-assembly-plugin

放到要打包的pom.xml中

  <build>
        <finalName>sb-my</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <!--<version>1.3.3.RELEASE</version>-->
                <configuration>
                    <includeSystemScope>true</includeSystemScope>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <!--repackage,其在Maven的package生命周期階段,能夠?qū)vn package生成的軟件包,再次打包為可執(zhí)行的軟件包,并將mvn package生成的軟件包重命名為*.original-->
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.2.0</version>
                <executions>
                    <execution>
                        <!--appendAssemblyId: 打包后的包名是否包含assembly的id名,assembly的配置在后面介紹;-->
                        <id>make-assembly</id>
                        <!--execution:phase加入package后,則在執(zhí)行maven package時(shí)就可以調(diào)用maven-assembly-plugin插件定義的打包方式。-->
                        <phase>package</phase>
                        <goals>
                            <!--只執(zhí)行一次-->
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <finalName>sb-my-${version}</finalName>
                    <archive>
                        <manifest>
                            <mainClass>cn.demo.Application</mainClass>
                        </manifest>
                    </archive>
                    <descriptors>
                        <!--descriptor:引用的assembly配置文件,可以用多個(gè),即可以同時(shí)打包多個(gè)格式的包;-->
                        <descriptor>src/main/resources/assembly/assembly.xml</descriptor>
                    </descriptors>
                    <appendAssemblyId>false</appendAssemblyId>
                </configuration>
            </plugin>
        </plugins>
    </build>

自定義打包配置文件assembly.xml

在src/main/resources/assembly/下新建assembly.xml

<assembly>
    <id>assembly</id>
    <formats>
        <!-- 打包成tar.gz格式,如果需要打包成zip格式,填寫(xiě)zip -->
        <format>tar.gz</format>
    </formats>
    <!-- 如果為true,打包出來(lái)的文件結(jié)構(gòu)第一層為pom.xml里面定義的artifactId-version -->
    <includeBaseDirectory>true</includeBaseDirectory>
    <!--fileSets 可以設(shè)置文件被打包的具體配置。可以過(guò)濾哪些文件被打包-->
    <fileSets>
        <fileSet>
            <!--資源目錄-->
            <directory>doc</directory>
            <includes>
                <!--過(guò)濾哪些文件被打包-->
                <include>*.sh</include>
            </includes>
            <!-- 輸出到當(dāng)前目錄 -->
            <outputDirectory>.</outputDirectory>
            <!-- 所有文件權(quán)限為755 -->
            <fileMode>0755</fileMode>
        </fileSet>
        <fileSet>
            <directory>doc/sql</directory>
            <includes>
                <include>*.sql</include>
            </includes>
            <outputDirectory>./doc/sql</outputDirectory>
        </fileSet>
        <fileSet>
            <directory>doc</directory>
            <includes>
                <include>*.docx</include>
            </includes>
            <outputDirectory>./doc</outputDirectory>
        </fileSet>
        <!--        <fileSet>
                    <directory>src/main/resources/</directory>
                    <includes>
                        <include>application.properties</include>
                        <include>java.env</include>
                    </includes>
                    <outputDirectory>.</outputDirectory>
                </fileSet>-->
    </fileSets>
    <files>
        <file>
            <source>src/main/resources/application.properties</source>
            <!--重命名文件-->
            <destName>config.properties</destName>
            <outputDirectory>.</outputDirectory>
        </file>
        <file>
            <!--jar文件是直接從target目錄下拷貝然后輸出到當(dāng)前包中的-->
            <source>target/sb-my.jar</source>
            <outputDirectory>.</outputDirectory>
        </file>
    </files>
</assembly>

效果

springboot基于assembly插件打包

assembly打包的優(yōu)點(diǎn)

讓springboot能夠加載jar外的配置文件。

方便提供一個(gè)服務(wù)化的啟動(dòng)腳本。

pom定義 

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.0.0</version>
                <!--<configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>-->
                <executions>
                    <execution>
                        <id>bundle</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                        <configuration>
                            <!-- <appendAssemblyId>false</appendAssemblyId> -->
                            <descriptors>
                               <descriptor>${basedir}/src/main/build/assembly.xml</descriptor>
                            </descriptors>
                            <!-- 打包后的文件生成目錄-->
                            <!--<outputDirectory>${project.build.directory}/dist/</outputDirectory>-->
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.1.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <!--main啟動(dòng)類-->
                            <mainClass>com.test.WorkWebApplication</mainClass>
                            <!--生成的manifest中classpath的前綴,因?yàn)橐训谌絡(luò)ar放到lib目錄下,所以classpath的前綴是lib/-->
                            <classpathPrefix>lib/</classpathPrefix>
                            <addClasspath>true</addClasspath>
                        </manifest>
                        <manifestEntries>
                            <Class-Path>conf/</Class-Path>
                        </manifestEntries>
                    </archive>
                    <!--過(guò)濾掉不希望包含在jar中的文件-->
                    <excludes>
                        <!-- 排除不需要的文件夾(路徑是jar包內(nèi)部的路徑) -->
                        <exclude>**/assembly/</exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

說(shuō)明:assembly.xml存放于src/main/build目錄,此外用于發(fā)布的config、bin目錄及文件都放到這個(gè)目錄;

具體內(nèi)容:

<assembly>
    <id>1.0</id>
    <formats>
        <format>tar.gz</format>
    </formats>
    <includeBaseDirectory>true</includeBaseDirectory>
    <fileSets>
        <!-- config files -->
        <fileSet>
            <directory>${basedir}/src/main/resources</directory>
            <outputDirectory>/conf</outputDirectory>
            <includes>
                <include>*.xml</include>
                <include>*.properties</include>
                <include>*.yml</include>
                <include>*.key</include>
                <include>dev/*</include>
                <include>prod/*</include>
                <include>test/*</include>
            </includes>
            <fileMode>0644</fileMode>
            <lineEnding>unix</lineEnding>
        </fileSet>
        <fileSet>
            <directory>target</directory>
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>*.jar</include>
            </includes>
        </fileSet>
        <!-- scripts -->
        <fileSet>
            <directory>${basedir}/src/main/build/bin</directory>
            <includes>
                <include>*.sh</include>
            </includes>
            <fileMode>0755</fileMode>
            <outputDirectory>/bin</outputDirectory>
        </fileSet>
        <!-- executable jar -->
        <fileSet>
            <directory>${project.build.directory}</directory>
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>${project.artifactId}-${project.version}.jar</include>
                <!--<include>${project.artifactId}-${project.version}-jar-with-dependencies.jar</include>-->
            </includes>
            <fileMode>0755</fileMode>
        </fileSet>
    </fileSets>
</assembly>

執(zhí)行mvn clean package  -Dmaven.test.skip=true 打包

出現(xiàn)如下錯(cuò)誤:

 因?yàn)槭窃趙indows上執(zhí)行assembly任務(wù),但是它包含了相對(duì)于linux的路徑。

解決方案:將outputDirectory節(jié)點(diǎn)直接閉合;或是在linux目錄前加一個(gè)點(diǎn)?;蛘吒某?{file.separator}

因此將上述腳本改成如下

<assembly>
    <id>1.0</id>
    <formats>
        <format>tar.gz</format>
    </formats>
    <includeBaseDirectory>true</includeBaseDirectory>
    <fileSets>
        <!-- config files -->
        <fileSet>
            <directory>src/main/resources/</directory>
            <outputDirectory>${file.separator}conf</outputDirectory>
        </fileSet>
        <fileSet>
            <directory>bin/</directory>
            <outputDirectory>${file.separator}</outputDirectory>
        </fileSet>
        <fileSet>
            <directory>target</directory>
            <outputDirectory>${file.separator}</outputDirectory>
            <includes>
                <include>*.jar</include>
            </includes>
        </fileSet>
        <!-- scripts -->
        <fileSet>
            <directory>${basedir}/src/main/build/bin</directory>
            <includes>
                <include>*.sh</include>
            </includes>
            <fileMode>0755</fileMode>
            <outputDirectory>${file.separator}bin</outputDirectory>
        </fileSet>
        <!-- executable jar -->
        <fileSet>
            <directory>${project.build.directory}</directory>
            <outputDirectory>${file.separator}</outputDirectory>
            <includes>
                <include>${project.artifactId}-${project.version}.jar</include>
                <!--<include>${project.artifactId}-${project.version}-jar-with-dependencies.jar</include>-->
            </includes>
            <fileMode>0755</fileMode>
        </fileSet>
    </fileSets>
</assembly>

繼續(xù)執(zhí)行打包命令,格式如下:

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 深入解析Java編程中final關(guān)鍵字的作用

    深入解析Java編程中final關(guān)鍵字的作用

    final關(guān)鍵字正如其字面意思一樣,意味著最后,比如被final修飾后類不能集成、變量不能被再賦值等,以下我們就來(lái)深入解析Java編程中final關(guān)鍵字的作用:
    2016-06-06
  • Spring Boot全局異常處理解析

    Spring Boot全局異常處理解析

    這篇文章主要為大家詳細(xì)介紹了Spring Boot全局異常處理的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Java+Freemarker實(shí)現(xiàn)根據(jù)XML模板文件生成Word文檔

    Java+Freemarker實(shí)現(xiàn)根據(jù)XML模板文件生成Word文檔

    這篇文章主要為大家詳細(xì)介紹了Java如何使用Freemarker實(shí)現(xiàn)根據(jù)XML模板文件生成Word文檔,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以學(xué)習(xí)一下
    2023-11-11
  • Java中數(shù)組如何轉(zhuǎn)為字符串的幾種方法

    Java中數(shù)組如何轉(zhuǎn)為字符串的幾種方法

    數(shù)組是java中一個(gè)重要的類型,小伙伴們知道如何將數(shù)組轉(zhuǎn)為字符串嗎,這篇文章主要給大家介紹了關(guān)于Java中數(shù)組如何轉(zhuǎn)為字符串的幾種方法,需要的朋友可以參考下
    2024-03-03
  • Java通過(guò)工廠、Map容器創(chuàng)建對(duì)象的方法

    Java通過(guò)工廠、Map容器創(chuàng)建對(duì)象的方法

    這篇文章主要介紹了Java通過(guò)工廠、Map容器創(chuàng)建對(duì)象的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • Java使用Calendar類實(shí)現(xiàn)動(dòng)態(tài)日歷

    Java使用Calendar類實(shí)現(xiàn)動(dòng)態(tài)日歷

    這篇文章主要為大家詳細(xì)介紹了Java使用Calendar類實(shí)現(xiàn)動(dòng)態(tài)日歷,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Java實(shí)現(xiàn)遞歸查詢樹(shù)結(jié)構(gòu)的示例代碼

    Java實(shí)現(xiàn)遞歸查詢樹(shù)結(jié)構(gòu)的示例代碼

    我們?cè)趯?shí)際開(kāi)發(fā)中,肯定會(huì)用到樹(shù)結(jié)構(gòu),如部門樹(shù)、菜單樹(shù)等等。Java后臺(tái)利用遞歸思路進(jìn)行構(gòu)建樹(shù)形結(jié)構(gòu)數(shù)據(jù),返回給前端,能以下拉菜單等形式進(jìn)行展示。今天,咱們就來(lái)說(shuō)說(shuō)怎么樣將List集合轉(zhuǎn)換成TreeList
    2022-11-11
  • Java使用MessageFormat應(yīng)注意的問(wèn)題

    Java使用MessageFormat應(yīng)注意的問(wèn)題

    這篇文章主要介紹了Java使用MessageFormat應(yīng)注意的問(wèn)題,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-06-06
  • 通過(guò)一個(gè)map替換字符串中指定的字符變量方法

    通過(guò)一個(gè)map替換字符串中指定的字符變量方法

    下面小編就為大家?guī)?lái)一篇通過(guò)一個(gè)map替換字符串中指定的字符變量方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03
  • Java實(shí)現(xiàn)導(dǎo)出Word文檔的示例代碼

    Java實(shí)現(xiàn)導(dǎo)出Word文檔的示例代碼

    poi-tl是一個(gè)基于Apache POI的Word模板引擎,也是一個(gè)免費(fèi)開(kāi)源的Java類庫(kù),你可以非常方便的加入到你的項(xiàng)目中。本文就利用它實(shí)現(xiàn)導(dǎo)出Word文檔功能,需要的可以參考一下
    2023-02-02

最新評(píng)論