情景
項目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,
關于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