Spring boot打包jar分離lib和resources方法例項
阿新 • • 發佈:2020-05-18
為什麼要配置、依賴檔案分離:
1.在傳統jar包中,所有檔案都打包到一個jar包中,jar非常臃腫,在進行服務更新部署時非常不便,而且傳輸不穩定時導致傳輸失敗。如果過實行檔案分離、在依賴不改變的情況下,僅僅上傳更新後的 編譯檔案是非常方便的。
如果要修改一些配置檔案:properties、xml,靜態檔案等可以直接在伺服器上編輯。
那麼怎麼實行配置、依賴檔案分離呢?
外掛介紹
- maven-jar-plugin 這個外掛式專門用來打包用的,可以配置需要打包進去的檔案,程式的入口類等。
- maven-resources-plugin 這個外掛是用來拷貝資原始檔的。
- maven-maven-dependency-plugin 這個外掛是用來拷貝依賴庫的。
- maven-assembly-plugin 可以說包含了以上外掛的功能,但是可以做到更精細的控制。
- spring-boot-maven-plugin 這個不用說,springboot 專案最重要的外掛,整個專案的打包處理過程還是要依附於它。
打包成可執行jar,不僅僅侷限SpringBoot專案(主入口函式存在)
maven-jar-plugin 外掛打包jar
在pom檔案中配置,但是這樣 依賴的jar並不會打進來(後面會有解決方法),適用不需要依賴檔案的專案。
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.3</version> <configuration> <archive> <manifest> <!--是否新增依賴--> <addClasspath>true</addClasspath> <!--設定啟動類--> <mainClass>xxx.xxx.Main</mainClass> </manifest> </archive> <!--設定生成jar輸出位置--> <outputDirectory>${project.build.directory}</outputDirectory> </configuration> </plugin>
maven-assembly-plugin 外掛打包jar
<plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <!--不新增AssemblyId--> <appendAssemblyId>false</appendAssemblyId> <descriptorRefs> <!--配置打包的時候一併打包依賴jar--> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <!--入口類--> <mainClass>xxx.xxx.Main</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <!--繫結生命週期--> <phase>package</phase> <goals> <!--執行assembly --> <goal>assembly</goal> </goals> </execution> </executions> </plugin>
打包SpringBoot 專案
方案一、
<plugins> <!--打包jar--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <!--MANIFEST.MF 中 Class-Path 加入字首--> <classpathPrefix>lib/</classpathPrefix> <!--jar包不包含唯一版本標識--> <useUniqueVersions>false</useUniqueVersions> <!--指定入口類--> <mainClass>xxx.xxx.Application</mainClass> </manifest> <manifestEntries> <!--MANIFEST.MF 中 Class-Path 加入資原始檔目錄--> <Class-Path>/resources</Class-Path> </manifestEntries> </archive> <outputDirectory>${project.build.directory}/dis</outputDirectory> </configuration> </plugin> <!--拷貝依賴 copy-dependencies--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory> ${project.build.directory}/dis/lib/ </outputDirectory> </configuration> </execution> </executions> </plugin> <!--拷貝資原始檔 copy-resources--> <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> </resource> </resources> <outputDirectory>${project.build.directory}/dis/resources</outputDirectory> </configuration> </execution> </executions> </plugin> <!--spring boot repackage,依賴 maven-jar-plugin 打包的jar包 重新打包成 spring boot 的jar包--> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <layout>ZIP</layout> <!--使用外部配置檔案,jar包裡沒有資原始檔--> <addResources>true</addResources> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
方案二
這裡依賴assembly.xml 描述檔案
<plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <appendAssemblyId>false</appendAssemblyId> <descriptors> <descriptor>assembly.xml</descriptor> </descriptors> <outputDirectory>${project.build.directory}/dist/</outputDirectory> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> <!-- 打包成jar檔案,並指定lib資料夾以及resources資原始檔夾 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <mainClass>xxx.xxx.Application</mainClass> <!--依賴字首--> <classpathPrefix>lib/</classpathPrefix> <addClasspath>true</addClasspath> </manifest> <manifestEntries> <Class-Path>resources/</Class-Path> </manifestEntries> </archive> </configuration> </plugin> </plugins>
assembly.xml
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"> <id>distribution</id> <!--輸出格式 zip 最終結果生成zip --> <formats> <format>zip</format> </formats> <includeBaseDirectory>false</includeBaseDirectory> <!--設定需要輸出檔案--> <fileSets> <fileSet> <directory>src/main/resources/</directory> <outputDirectory>/resources</outputDirectory> </fileSet> </fileSets> <dependencySets> <dependencySet> <!--依賴包的輸出目錄--> <outputDirectory>/lib</outputDirectory> <scope>runtime</scope> <excludes> <exclude>${project.groupId}:${project.artifactId}</exclude> </excludes> </dependencySet> <dependencySet> <!--jar包的輸出目錄--> <outputDirectory>/</outputDirectory> <includes> <include>${project.groupId}:${project.artifactId}</include> </includes> </dependencySet> </dependencySets> </assembly>
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。