在使用assembly打包工具打包maven項目的時候出現本地jar包無法導出的情況,通過以下配置可以解決此問題:
1.在pom.xml配置assembly工具
<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.tgb</groupId> <artifactId>mavenTest</artifactId> <version>0.0.1-SNAPSHOT</version> <name>mavenTest</name> <description>java service wrapper test</description> <properties> <jdk.version>1.8</jdk.version> <junit.version>4.11</junit.version> <log4j.version>1.2.16</log4j.version> <logback.version>1.1.7</logback.version> </properties> <dependencies> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.59</version> </dependency> <dependency> <groupId>org.ini4j</groupId> <artifactId>ini4j</artifactId> <version>0.5.4</version> </dependency> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.6</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>javaini</groupId> <artifactId>javaini</artifactId> <version>1.1.00</version> <scope>system</scope> <systemPath>${project.basedir}/src/main/resources/lib/org.dtools.javaini-1.1.00.jar</systemPath> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>${logback.version}</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>2.6</version> <configuration> <encoding>UTF-8</encoding> <includeSystemScope>true</includeSystemScope> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</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> <!-- assembly版本 --> <version>2.2.1</version> <executions> <!-- <execution> <id>make-daemon-linux-zip</id> <phase>package</phase> <goals> <goal>single</goal> </goals> <configuration> <finalName>jsw-test</finalName> <appendAssemblyId>true</appendAssemblyId> <outputDirectory>${project.build.directory}</outputDirectory> <descriptors> <descriptor>src/main/assembly/daemon-linux-zip.xml</descriptor> </descriptors> </configuration> </execution> --> <execution> <!-- id標識,唯一即可 --> <id>make-daemon-win-zip</id> <!-- 設置package階段進行 --> <phase>package</phase> <goals> <!-- 只運行一次 --> <goal>single</goal> </goals> <configuration> <!-- 輸出的最終名稱,自動添加格式后綴(如zip),當前示例為jsw-test.zip --> <finalName>jsw-test</finalName> <!-- 配置是否添加id到名稱中,若為true,當前示例中,則為jsw-test-zip.zip,false即不添加,只是jsw-test.zip; 若同時打多個包,則可設為true,分別添加id以作區分 --> <appendAssemblyId>true</appendAssemblyId> <!-- 打包的輸出目錄,可自定義,${project.build.directory}為編譯輸出目錄,即target目錄 --> <outputDirectory>${project.build.directory}</outputDirectory> <descriptors> <!-- 使用的描述符,按此描述進行打包,此處配置一個zip.xml表示打zip包 --> <descriptor>src/main/assembly/assembly-win-zip.xml</descriptor> </descriptors> </configuration> </execution> <!-- 若要同時打多個包(如windows和linux不同系統的包),可配置多個execution,此處只打zip,因此配置一個 --> <!-- <execution> id標識,唯一即可 <id>make-wrapper-win-zip</id> 設置package階段進行 <phase>package</phase> <goals> 只運行一次 <goal>single</goal> </goals> <configuration> 輸出的最終名稱,自動添加格式后綴(如zip),當前示例為jsw-test.zip <finalName>jsw-test</finalName> 配置是否添加id到名稱中,若為true,當前示例中,則為jsw-test-zip.zip,false即不添加,只是jsw-test.zip; 若同時打多個包,則可設為true,分別添加id以作區分 <appendAssemblyId>true</appendAssemblyId> 打包的輸出目錄,可自定義,${project.build.directory}為編譯輸出目錄,即target目錄 <outputDirectory>${project.build.directory}</outputDirectory> <descriptors> 使用的描述符,按此描述進行打包,此處配置一個zip.xml表示打zip包 <descriptor>src/main/assembly/wrapper-win-zip.xml</descriptor> </descriptors> </configuration> </execution> --> </executions> </plugin> </plugins> </build> </project>
2.配置assembly-win-zip.xml
<assembly> <!-- id標識,唯一即可,若pom中的appendAssemblyId設置為true,則會添加此id作為后綴 --> <id>daemon-win</id> <formats> <!-- 打包的格式 --> <format>zip</format> </formats> <!-- 打包的文件不包含項目目錄,壓縮包下直接是文件 --> <includeBaseDirectory>false</includeBaseDirectory> <!-- 配置依賴的輸出 --> <dependencySets> <dependencySet> <!-- 是否把當前項目的輸出jar包並使用,true則會把當前項目輸出為jar包到輸出目錄,false不輸出 --> <useProjectArtifact>false</useProjectArtifact> <scope>system</scope> <!-- 依賴輸出目錄,相對輸出目錄的根目錄,當前示例把依賴輸出到lib目錄 --> <outputDirectory>/lib</outputDirectory> </dependencySet> <dependencySet> <!-- 是否把當前項目的輸出jar包並使用,true則會把當前項目輸出為jar包到輸出目錄,false不輸出 --> <useProjectArtifact>false</useProjectArtifact> <scope>runtime</scope> <!-- 依賴輸出目錄,相對輸出目錄的根目錄,當前示例把依賴輸出到lib目錄 --> <outputDirectory>/lib</outputDirectory> </dependencySet> </dependencySets> <!-- 文件輸出 --> <fileSets> <fileSet> <!-- 源目錄,此處是把編譯出來的class文件都輸出到根目錄下的classes目錄 --> <directory>${project.build.directory}/classes</directory> <!-- 輸出目錄 --> <outputDirectory>/classes</outputDirectory> </fileSet> <fileSet> <directory>install/daemon</directory> <includes> <include>commons-daemon-1.0.15.jar</include> </includes> <outputDirectory>/lib</outputDirectory> </fileSet> <fileSet> <!-- 此處是把daemon文件全部輸出到根目錄下的install目錄 --> <directory>install/daemon/windows</directory> <outputDirectory>/bin</outputDirectory> </fileSet> </fileSets> </assembly>
注意<scope>system</scope>是實現打包本地jar包的配置