編譯環(huán)境: Ubuntu kylin 14.04, IntelliJ IDEA, jdk1.7
IDEA不似 myeclipse,在編寫代碼時,只能做到代碼檢測,而不會對整個項目進行實時編譯,往往需要手工編譯.
而且工程中各個模塊都可以運行時,maven編譯往往不通過.
編譯一個含有多個modul的工程,需要注意一下幾個問題:
1. 循環(huán)依賴
多個模塊之間,往往存在代碼共享,這樣,很有可能出現(xiàn)循環(huán)以來的問題.
比如項目A中有A1, A2, A3三個模塊,我們用A-->B代表A依賴B,這樣就可能出現(xiàn)
循環(huán)依賴 A1 --> A2 --> A3--> A1
雙向依賴 A1 <--> A2
這種情況下,編譯不會通過,相當(dāng)于一種死鎖,如下圖:
既然是在IDEA中,當(dāng)然可以利用依賴圖查找問題依賴,并盡量處理掉.
具體見http://blog.csdn.net/isea533/article/details/52180116
以及 http://hck.iteye.com/blog/1728329
2. 依賴庫版本不一致
項目中module較多時,可能出現(xiàn)模塊之間所依賴的第三方庫版本不一致,甚至出現(xiàn)父pom與子pom之間的不一致,如果認(rèn)為版本問題當(dāng)然由第三方自己去解決,那就大錯特錯了.
這里就要用到<dependencyManagement>.
在父pom里對引用庫版本進行控制,在子pom里去除版本:
<!-- 父pom進行版本控制 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>20.0</version>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 子pom 去除版本信息 -->
<dependencies>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
這樣,統(tǒng)一引入依賴,可以避免依賴庫時多次查找統(tǒng)計版本,出現(xiàn)照顧不周全的問題.
Management可能還有其他功能,有待發(fā)現(xiàn).
3. 多模塊編譯順序混亂
這是難也是最容易解決的問題.
如果你分別對子模塊進行編譯,就要考慮相互之間的依賴關(guān)系,進而要理順序,這樣在模塊較多的情況下,很難實現(xiàn),另外,如果直接對總項目進行compile,依然會出現(xiàn)混亂的問題,還有無法加載本地jar包的問題.
這時,有一個簡單的方法:
1>. 先對整個項目 install
2>. 有問題就解決問題,如去除 @Test用例中的error測試方法
3>. 直接對項目compile,一般不會出錯了...