情景
項目A 可以local run,在A 的pom文件里,你想local debug 其中一個dependency B 的具體邏輯 (B 的源代碼你也有), 但是B 同時也依賴了別的dependency, 例如 C,D,E。你需要做:
- 步驟1:從A的pom.xml里面注釋掉B / 從別的dependency里 exclude掉B.>>> 具體項目中,B可能是單獨的依賴,也可能是其他依賴的子依賴
- 步驟2:inlcude B module 的源代碼到A module所在的項目中.
- 步驟3:在A的pom.xml里,引入原本B pom.xml里面的dependency,例如 C,D E
易錯點
關於遞歸引入dependency
- maven會自動遞歸的幫你include所有dependency, 以及dependency的子dependency...一直這么遞歸下去。因此當你在A 的pom.xml里面include B, 那個B的dependency (C,D E)會自動include,不必再顯示引入。
- 可一旦你在A的pom.xml exclude B,那么B的dependency (C,D E)也就不存在了。這時候你通過步驟2,把B的module作為A 的dependency,是不會遞歸的include B的dependency (C,D E)。因此,你需要手動的在A pom.xml里面引入 C,D E。如果不引入(C,D E):
- 編譯階段不會報錯,是因為 A 沒有直接使用(C,D E)的class.但是在運行階段,會報錯
- 編譯階段會報錯,是因為 A 直接使用(C,D E)的class.
關於groupId必須相同
- 聯調的module需要有相同的groupId, 參考: IntelliJ IDEA打開多個Maven的module且相互調用代碼
關於reimport后,引用關系消失
按照本篇文章引入module, 一旦reimport maven,或者自己修改了pom內容引發reimport,都會導致module引用消失,需要重新建立。
步驟1: 在A的pom.xml 里面 exclude B 的dependency
<dependency> <groupId>com.unity.risk</groupId> <artifactId>UnityRisk-RiskEngine</artifactId> <version>${RiskEngineVersion}</version> <type>jar</type> <scope>compile</scope> <!--exclude B--> <exclusions> <exclusion> <groupId>B-groupId</groupId> <artifactId>B-artifactId</artifactId> </exclusion> </exclusions> </dependency>
步驟2: Inlcude B module 的源代碼到A module所在的項目中
步驟2.1: include B module的源碼到A module的項目中
找到帶有pom.xml的父目錄
一路默認點擊next
步驟2.2: 將B module設置為A module的dependency
參考
IntelliJ IDEA打開多個Maven的module且相互調用代碼
如何在Intellij IDEA 一個module 導入另一個module
Maven聚合項目-IDEA-各模塊間不能引用問題的解決方法