使用maven插件構建可運行jar


當使用java+maven進行構建項目時,不依賴spring相關的東西,比如在做一些簡單地應用類java項目時,當用到一些第三方的依賴jar是,在項目編寫好之后,我們希望將項目構建成一個可運行的jar包並包含依賴的jar包,然后通過jar -jar xxx.jar來運行,這時我們可以使用maven的插件maven-assembly-plugin來實現。

maven-assembly-plugin 插件官方文檔:http://maven.apache.org/plugins/maven-assembly-plugin/index.html

1、pom依賴:

<build>
        <finalName>jar_handle</finalName>
        <!--使用Maven編譯可執行的jar -->
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <appendAssemblyId>false</appendAssemblyId>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifest>
<!-- 程序入口 --> <mainClass>com.xxx.Main</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>assembly</goal> </goals> </execution> </executions> </plugin> </plugins> </build>

maven-assembly-plugin插件會把項目中用到的依賴jar包包含在可執行的jar包中,這樣項目在運行時有引用依賴jar的API地方就不會報錯。使用idea工具可以看到assembly插件:

2、然后我們可以直接通過mvn clean install命令就會生成需要的jar包,如下:

這樣就可以使用jar -jar命令來運行應用jar了

附注:

1、對於不依賴第三方的依賴jar時,我們可以使用maven-jar-plugin插件進行打包構建可運行jar,pom配置如下:

           <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
<!-- 設置是否添加類路徑屬性 --> <addClasspath>true</addClasspath>
<!-- 設置類路徑前綴 --> <classpathPrefix>lib/</classpathPrefix>
<!-- 程序路口 --> <mainClass>com.xxx.Main</mainClass> </manifest> </archive> </configuration> </plugin>

使用mvn clean install構建包如下

可以看到該插件不會把依賴jar構建進最終jar包中。

2、此時可以考慮使用maven-dependency-plugin將需要的依賴jar復制到某個文件目錄下,在后續啟動應用jar時將目錄路徑設置成maven-jar-plugin插件設置的classpathPrefix屬性設置的關聯路徑來運行。

pom配置

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <mainClass>com.xxx.Main</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
            <!-- 拷貝依賴的jar包到lib目錄 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>
                                ${project.build.directory}/lib
                            </outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

上述中的classpathPrefix屬性設置了類路徑加載路徑配置,需配合addClasspath設置為true一起使用。效果詳見下圖:

應用運行時就會按設置的路徑去加載依賴jar,此時就是配置好依賴jar的路徑與設置的路徑一致即可。

 


免責聲明!

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



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