1. 程式人生 > >Spring Boot 打包,分離依賴jar,配置檔案

Spring Boot 打包,分離依賴jar,配置檔案

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中的配置,有效