在使用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包的配置