Spring Boot 打包,分離依賴jar,配置檔案
阿新 • • 發佈:2018-11-25
maven-jar-plugin,負責將應用程式打包成可執行的jar檔案
maven-assembly-plugin,負責將整個專案按照自定義的目錄結構打成最終的壓縮包,方便實際部署
需求1,將依賴的jar提取到可執行的jar檔案之外,我們使用maven-jar-plugin來實現
最終的可執行檔案jar檔案並不包含依賴的jar包,所有依賴的jar包都放在和ps.jar平行的lib資料夾內,這樣如果以後想快速部署,就不用每一次都把體積很大的lib包都要傳一遍,除非依賴包有所變化。這裡的maven-jar-plugin的配置檔案如下
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.6</version> <configuration> <archive> <!-- 新增index則不從mainfest中讀取classpath,而是從Index.list中讀取 --> <!-- <index>true</index> --> <manifest> <mainClass>com.vmpay.pay.App</mainClass> <!-- to create a class path to your dependecies you have to fill true in this field --> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> </manifest> <manifestEntries> <Class-Path>./</Class-Path> </manifestEntries> </archive> <excludes> <exclude>config/**</exclude> </excludes> </configuration> </plugin>
classpath目錄是./
mainClass配置表示,哪個class作為程式的入口來執行
addClasspath配置表示,是否將依賴的classpath一起打包
classpathPrefix配置表示,依賴的classpath的字首,也就是打包後生成的MANIFEST.MF檔案裡,引入的jar檔案都會加上字首,lib/,比如fastjson-1.2.7.jar,在mainfest檔案裡就會是lib/fastjson-1.2.7.jar
excludes配置表示,排除哪些資料夾不被打包進去
需求2,定義目錄結構
<plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <!-- not append assembly id in release file name --> <appendAssemblyId>false</appendAssemblyId> <descriptors> <descriptor>src/main/build/package.xml</descriptor> </descriptors> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin>
重點的就是package.xml的路徑了,使用maven-assembly-plugin的相關配置實際上都在這個檔案裡面
package.xml的檔案內容
<?xml version="1.0" encoding="UTF-8"?>
<assembly>
<id>package</id>
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>true</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>bin</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
<fileSet>
<directory>src/main/resources</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
<fileSet>
<directory>${project.build.directory}</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>*.jar</include>
</includes>
</fileSet>
<!-- 把專案的指令碼檔案目錄( src/main/scripts )中的啟動指令碼檔案,打包進zip檔案的跟目錄 -->
<fileSet>
<directory>${project.build.scriptSourceDirectory}</directory>
<outputDirectory></outputDirectory>
<includes>
<include>startup.*</include>
</includes>
</fileSet>
</fileSets>
<dependencySets>
<dependencySet>
<outputDirectory>lib</outputDirectory>
<scope>runtime</scope>
<!-- <unpack>false</unpack> -->
<excludes>
<!-- <exclude>${project.name}-${project.version}</exclude> -->
<exclude>${groupId}:${artifactId}</exclude>
</excludes>
</dependencySet>
</dependencySets>
</assembly>
生成結果
mvn clean package
執行
java -jar hawaii_client_log_kafka-0.0.1-SNAPSHOT.jar --spring.profiles.active=local
修改application-local.yml中的配置,有效