maven 打包第三方依賴包


首先,簡單介紹Maven。Maven是管理Java項目開發的工具,不是IDE,不是編譯工具。它只是提供了一套規則和插件,說明如何對Java項目進行開發和管理。

它的規則通過POM文件說明。對於POM文件,這里不詳細介紹,只做大致介紹。我認為,POM文件大致有兩個作用,靜態描述和動態描述。第一個作用,靜態描述,即對POM文件所在的文件夾的(子)項目的介紹,比如該(子)項目的唯一標識(坐標),該子項目的依賴,該子項目的打包方式等;第二個作用,動態描述,即如何對該(子)項目進行編譯、測試、打包等,用生命周期表示。Maven提供三個生命周期以及各個生命周期階段所需的插件,可以不改直接用,也可以根據自己的需要修改。編譯、測試、打包等不是Maven實現,而是它的倉庫中提供的插件。倉庫是用來存放插件和依賴的地方。倉庫有本地、遠程倉庫。遠程倉庫又分為:2中央倉庫、 私服 和其它公共庫。這里不做詳細介紹。

這里的任務是如何將第三包依賴包加入到最終的jar可執行文件中。

對於第三方依賴(external dependency) ,有四種方式可以使用。第一種方式,在本地倉庫中添加該依賴;第二種方式:將該倉庫deploy,放在遠程倉庫,最好大家都能訪問;第三種方式:將該依賴的scope描述為system並說明絕對路徑;第四種方式:將該依賴放在程序的自建倉庫(static project repository),並在打包的時候將其將入到最終的jar。

本文主要是說明第四種方法,也比較推薦第四種方法。因為前三種方法,要么不利於最終jar文件的分發,要么比較麻煩。第四種方法,在運行的時候不需要修改或者添加java lib path。

很多時候,當某個項目需要的依賴是第三方提供的,我這類遇到的是Jcuda。由於當時在遠程倉庫還沒有Jcuda 7.5 的依賴,就需要將其作為第三方依賴來處理。在編譯的時候使用的是第三種方法,但是因為需要再另一台機器上運行,就出現問題了。網上找了很久,有兩個說的很好。

http://blog.dub.podval.org/2010/01/maven-in-project-repository.html

http://stackoverflow.com/questions/364114/can-i-add-jars-to-maven-2-build-classpath-without-installing-them

這兩個鏈接說明了,如何將該依賴包放在程序的lib中,該文件夾如何組織才不會出錯,路徑如何。

至於如何將該依賴的jar文件打包到最終的文件中。

 

第一步: 將依賴文件放到程序的repository中;

 

第二步:在pom.xml中指明依賴;

<dependency>
                <groupId>jcuda</groupId>
                <artifactId>jcuda</artifactId>
                <version>0.7.5</version>
</dependency>

第三步:打包

首先需要明白,maven打包有兩種,生成一個jar包或者生成一個zip包。用maven-jar-plugin來生成jar包。使用maven-jar-plugin和maven-assembly-plugin來生成zip包。

這里,我們第二種方式。即:將應用打成一個jar包,依賴的第三方包放到lib目錄下。

首先使用maven-jar-plugin,將自己的代碼編譯為jar文件;

需要注意到是這段

                         <archive>
                                    <manifest>
                                       ...
                                        <addClasspath>true</addClasspath>
                                        <classpathPrefix>lib/</classpathPrefix>
                        ... </manifest> </archive>

再使用maven-assembly-plugin,將整個項目打包為一個發布包

 

關於 maven-jar-plugin 和 maven-assembly-plugin 怎么寫,見 http://blog.csdn.net/cdmamata/article/details/51547033

 

 

也可以見:強烈推薦這個:

http://xxgblog.com/2015/08/07/maven-create-executable-jar/

 

其實,一團迷糊,說明對每個插件還不是很了解。如果對每個插件了解后,就不會有怎么多問題了。因為我只是在一個項目中多增減一個第三方依賴,因為它本來就需要對其他第三方依賴進行打包,所以我只需要完成前兩步就可以了。后面兩步,關鍵是對於幾個插件的使用說明。

 


免責聲明!

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



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