天天看點

Maven編譯多子項目依賴

早在某公司實習的時候就聽聞過Maven,隻是聽大神簡單的介紹過,自己沒有實習做過。之前做Android 的時候主要是用gradle(不過真心不熟),大概有點知道Maven的作用,這次來深圳某公司實習,老闆叫用Maven 編譯C++,雖然事實證明老闆的想法有點錯誤,不過也基于這個,還是稍微正規的學了一發Maven(當然是自學了,除了C++其他都是自學的)。

Maven簡介

Maven其實主要就是解決項目編譯和項目依賴的問題,在大型項目中很有優勢。

例如你的一個項目中有幾十外部依賴包,和你自己寫的一些包,如果是不用Maven這種東西的話,你得一個一個包的下載下傳,這樣比較效率低下,而且一旦你用的包有更新,你又要重新去下載下傳,可能在小項目中這倒沒什麼,但是在正規的大項目中,外部包的更新換代對項目還是有很大的影響,如果一個外部包有漏洞,可能給黑客攻擊的機會,這個時候就必須得更新包。

是以Maven就應運而生,在Maven中隻要在一個pom檔案中,做一些配置,就可以自動下載下傳所需要的依賴包到本地倉庫,然後多個項目可以共享本地倉庫的依賴包。如果依賴包需要更新的時候,隻需要改一下版本号,就可以了。而且Maven的pom是每個項目(子產品)都會有,這些pom中可以有繼承的關系,是以有一些依賴包隻要在一個parent裡面定義就可以了,而且在子pom中也可以自己覆寫父pom的定義。

這裡隻是簡單介紹一下Maven的一些概念,關于安裝Maven網絡上已經有很多教程了,這裡就不重複造輪子了,還有Maven的詳細原理,這裡就給一些自己學習過程的中一些資料:

Maven 入門詳解 http://ifeve.com/maven-1/ 

Maven Linux上部署項目 

http://www.oracle.com/technetwork/cn/community/java/apache-maven-getting-started-1-406235-zhs.html 

Maven多項目建構

 下面介紹一下在網上沒有的東東,在Windows上Intellij裡面部署一個多項目Maven的過程以及踩過的坑。

注意:這裡介紹的多項目是一個大項目下包括多個子項目,本身大項目中的pom是起到配置作用,不生成jar或war檔案,運作在Main項目中,Main項目中調用Part1和Part2兩個項目中的函數

首先建立一個Maven項目,取名MavenProject生成的時候不要用模闆(如果是自己的項目有一定類型可以用模闆,這裡隻是一個教程,是以沒有用模闆)。然後生成之後删掉scr檔案夾。然後再添加三個子產品,取名Main,Part1,Part2,groupID繼承MavenProject的,artifactID自己寫。然後這個時候目錄是這樣的

Maven編譯多子項目依賴

然後就可以再main(是main不是Main)檔案夾裡面的java檔案夾裡面寫代碼,但是這個第一個坑來了,如果你點選那個java右鍵添加,裡面沒有java class的選項,即使你添加了file,字尾是java,也不行,我找了好久都沒找到解決方法,一直以為是配置出問題了,結果這裡是IDE的鍋,這裡要去file -> project structure-->module裡面設定一下,這個時候就要一個一個的mark as,然後就可以正常些代碼了,這個坑找了好久的問題。

Maven編譯多子項目依賴

寫好代碼,如下圖 

main.java

Maven編譯多子項目依賴

Part1.java

Maven編譯多子項目依賴

Part2.java

Maven編譯多子項目依賴

由于這裡是Main要引用到part1和part2中的東西,是以在main的pom裡面配置一下依賴,part1和part2中的pom由于并沒有依賴,是以用自動生成的就可以了

Maven編譯多子項目依賴

這樣就會引用到這兩個庫了,可以在右邊的一個控制闆中看到(那個九十度倒着的M字樣,如果是intellij中的),記得重新整理一下

Maven編譯多子項目依賴

然後這個時候點Main的install就可以了,也可以用mvn install的指令

Maven編譯多子項目依賴

Maven依賴包打包生成

這個時候在main裡面的target就會生成一個jar包,然後你一運作就會發現,clssNotFound,因為maven打包預設不會把依賴包打進去,找到不到依賴的part1和part2。是以這裡就是第二坑,這裡在網上查各種複雜的方法,一堆麻煩,而且我也一直以為不用插件,隻需要配置一下就可以了,一直沒找到。後來找到一個網站,那個配置方法很簡單,不過還是用了插件

Maven編譯多子項目依賴

在pom加上這段就行了,會下載下傳一個插件,貌似公司的項目把依賴包打進去也是用這個,maven官方出的插件,值得信賴。

這是這段代碼的來源:http://lvjun106.iteye.com/blog/1849803 

最後當然就是搞定咯,但是花了一下午…….

因為前人,才能更高

1.Maven 入門詳解 http://ifeve.com/maven-1/ 

2.Maven Linux上部署項目 http://www.oracle.com/technetwork/cn/community/java/apache-maven-getting-started-1-406235-zhs.html 

3.Maven 打包依賴包生成目标檔案  http://lvjun106.iteye.com/blog/1849803 

4.Maven 編譯C/C++插件 http://blog.bigpixel.ro/2012/07/building-cc-applications-with-maven/  (本文中沒有提及這個連結,但是這個可以作為用Maven編譯C/C++的一個思路,但本人通過查閱其他資料,以及個人了解還是建議,編譯C/C++不用該用maven,盡管是Java和C/C++混合程式設計,編譯C/C++可以用GCC,或者makefile更加合适,至于用法可參見本人上一篇部落格)

繼續閱讀