1. 修改pom.xml
pom.xml中設置以下:html
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zd</groupId> <artifactId>logETL</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <name>logETL</name> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <base.dir>/</base.dir> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.2</version> <scope>provided</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.28</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.2</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.2</version> </dependency> <dependency> <!-- 橋接:告訴Slf4j使用Log4j2 --> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>2.2</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.10</version> </dependency> </dependencies> <build> <finalName>stormETL</finalName> <resources> <resource> <directory>src/main/resources</directory> <excludes> <exclude>assembly.xml</exclude> </excludes> </resource> <resource> <directory>src/main/java</directory> <includes> <include>c3p0-config.xml</include> </includes> </resource> </resources> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.0</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.6</version> <configuration> <!-- appendAssemblyId屬性控制是否在生成的打包文件的文件名中包含assembly id --> <appendAssemblyId>false</appendAssemblyId> <!-- 這個jar-with-dependencies是assembly預先寫好的一個assembly.xml,就不須要咱們本身再寫了。 --> <!--<descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs>--> <!-- 設置META-INF/MANIFEST.MF中的Main-Class--> <archive> <manifest> <mainClass>com.cmsz.RunMain</mainClass> </manifest> </archive> <!-- 使用自定義的assembly.xml(文件名隨意 XX.xml便可) --> <descriptors> <descriptor>src/main/resources/assembly.xml</descriptor> </descriptors> </configuration> <executions> <execution> <id>make-assembly</id> <!-- 將assembly綁定到package生命週期上 --> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
其中<artifactId>maven-assembly-plugin</artifactId>的maven-assembly-plugin是這個插件的標準命名,在maven2.0.*中帶的默認版本是java
execution的設置是爲了將maven-assembly-plugin繼承到標準的maven打包過程當中,這樣在運行maven-package時就會執行maven-assembly-plugin的操做,從而實現咱們須要的自定義打包。mysql
2. assemble descriptor file
個人src/main/resources/assembly.xml內容以下:sql
<assembly> <!-- 最終生成的包名稱爲artifactId-version-id.format, id主要用來區分包是由哪一個assembly文件生成的,本例中 artifactId:test version:1.0.0 id:bin format:tar.gz 最終將會在target文件夾下生成一個名爲test-1.0.0-bin.tar.gz的包 --> <id>bin</id> <!-- zip, tar, tar.gz, tar.bz2, jar, dir, war 也是支持的 --> <formats> <!-- 能夠同時打多種格式的包 --> <!--<format>tar.gz</format>--> <!-- <format>zip</format> --> <format>jar</format> </formats> <!-- 默認值是true,此時將建立一個名爲artifactId-version的根文件夾, 全部outputDirectory標籤指定的路徑將變爲相對於該文件夾的路徑。 例如:outputDirectory的值爲/test,則最終徑爲/artifactId-version/test 若是includeBaseDirectory的值是false,則最終路徑爲/test --> <includeBaseDirectory>false</includeBaseDirectory> <!-- 將指定路徑下全部文件輸出到指定目錄--> <fileSets> <!-- 若是存在fileSet標籤,而且在標籤中沒有使用includes標籤指定打入包中的文件, 默認狀況下,工程中的全部文件(源文件、編譯後產生的.class文件、配置文件等) 都會被打入包中 --> <fileSet> <outputDirectory>/</outputDirectory> <directory>src/main/java</directory> </fileSet> </fileSets> <!-- 將指定文件輸出到指定目錄--> <files> <file> <!-- source不能使用模糊匹配,必須是特定的文件 --> <source>src/main/java/c3p0-config.xml</source> <outputDirectory>/</outputDirectory> </file> </files> <dependencySets> <dependencySet> <!-- true是默認值,本次構建出來的jar包屬於當前這個dependencySet, 此時jar包將會被添加至新的jar包中 --> <useProjectArtifact>true</useProjectArtifact> <outputDirectory>/</outputDirectory> <!-- 定義了是否解壓依賴包,若是爲true,會解壓出依賴包中的class文件,反之,則不進行解壓 --> <unpack>true</unpack> </dependencySet> <dependencySet> <!-- 本次構建出來的jar包是否包含當前工程 --> <useProjectArtifact>false</useProjectArtifact> <outputDirectory>/test</outputDirectory> <!-- 定義了是否解壓依賴包,若是爲true,會解壓出依賴包中的class文件,反之,則不進行解壓 --> <unpack>true</unpack> <!-- 限定了對哪些依賴包進行操做(依賴包scope的值是在pom.xml中定義的) --> <scope>test</scope> </dependencySet> <dependencySet> <useProjectArtifact>false</useProjectArtifact> <outputDirectory>/provided</outputDirectory> <unpack>true</unpack> <!-- 限定了對哪些依賴包進行操做(依賴包scope的值是在pom.xml中定義的) --> <scope>provided</scope> </dependencySet> </dependencySets> </assembly>
詳細的語法不介紹了,請參考官方指南,有很是詳盡的說明:Assembly Descriptor Format reference
簡單解釋一下:
1) formatapache
format=zip設置打包的最終文件格式爲zip. 支持的其餘格式還有gz,tar,tar.gz,tar.bz2。
2) filesetapi
<fileSet> <directory>src/main/bin</directory> <outputDirectory>/</outputDirectory> </fileSet>
將src/main/bin目錄下的文件打包到根目錄(/)下.app
<fileSet> <directory>src/main/bin</directory> <outputDirectory>config</outputDirectory> </fileSet>
將src/main/config目錄下的文件打包到config下.
3) dependencySetsmaven
<dependencySet> <outputDirectory>lib</outputDirectory> <scope>runtime</scope> </dependencySet>
將scope爲runtime的依賴包打包到lib目錄下。ide