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 Linux上部署專案
Maven多專案構建
下面介紹一下在網上沒有的東東,在Windows上Intellij裡面部署一個多專案Maven的過程以及踩過的坑。
注意:這裡介紹的多專案是一個大專案下包括多個子專案,本身大專案中的pom是起到配置作用,不生成jar或war檔案,執行在Main專案中,Main專案中呼叫Part1和Part2兩個專案中的函式
首先新建一個Maven專案,取名MavenProject生成的時候不要用模板(如果是自己的專案有一定型別可以用模板,這裡只是一個教程,所以沒有用模板)。然後生成之後刪掉scr資料夾。然後再新增三個模組,取名Main,Part1,Part2,groupID繼承
然後就可以再main(是main不是Main)資料夾裡面的java資料夾裡面寫程式碼,但是這個第一個坑來了,如果你點選那個java右鍵新增,裡面沒有java class的選項,即使你添加了file,字尾是java,也不行,我找了好久都沒找到解決方法,一直以為是配置出問題了,結果這裡是IDE的鍋,這裡要去file -> project structure-->module裡面設定一下,這個時候就要一個一個的mark as,然後就可以正常些程式碼了,這個坑找了好久的問題。
寫好程式碼,如下圖
main.java
Part1.java
Part2.java
由於這裡是Main要引用到part1和part2中的東西,所以在main的pom裡面配置一下依賴,part1和part2中的pom由於並沒有依賴,所以用自動生成的就可以了
這樣就會引用到這兩個庫了,可以在右邊的一個控制板中看到(那個九十度倒著的M字樣,如果是intellij中的),記得重新整理一下
然後這個時候點Main的install就可以了,也可以用mvn install的命令
Maven依賴包打包生成
這個時候在main裡面的target就會生成一個jar包,然後你一執行就會發現,clssNotFound,因為maven打包預設不會把依賴包打進去,找到不到依賴的part1和part2。所以這裡就是第二坑,這裡在網上查各種複雜的方法,一堆麻煩,而且我也一直以為不用外掛,只需要配置一下就可以了,一直沒找到。後來找到一個網站,那個配置方法很簡單,不過還是用了外掛
在pom加上這段就行了,會下載一個外掛,貌似公司的專案把依賴包打進去也是用這個,maven官方出的外掛,值得信賴。
最後當然就是搞定咯,但是花了一下午…….
因為前人,才能更高
3.Maven 打包依賴包生成目標檔案 http://lvjun106.iteye.com/blog/18498034.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更加合適,至於用法可參見本人上一篇部落格)