maven打包工具assembly打包本地jar的解決辦法


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM