maven-jar-plugin,負責將應用程序打包成可執行的jar文件
maven-assembly-plugin,負責將整個項目按照自定義的目錄結構打成最終的壓縮包,方便實際部署 java
最終的可運行文件jar文件並不包含依賴的jar包,全部依賴的jar包都放在和ps.jar平行的lib文件夾內,這樣若是之後想快速部署,就不用每一次都把體積很大的lib包都要傳一遍,除非依賴包有所變化。這裏的maven-jar-plugin的配置文件以下 spring
<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配置表示,排除哪些文件夾不被打包進去 apache
<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的文件內容json
<?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
運行app
java -jar hawaii_client_log_kafka-0.0.1-SNAPSHOT.jar --spring.profiles.active=local
修改application-local.yml中的配置,有效maven