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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章