天天看點

IDEA - 調試Maven中的某一個dependency + 多module聯調

情景

項目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
IDEA - 調試Maven中的某一個dependency + 多module聯調

易錯點

關于遞歸引入dependency

  1. maven會自動遞歸的幫你include所有dependency, 以及dependency的子dependency...一直這麼遞歸下去。是以當你在A 的pom.xml裡面include B, 那個B的dependency (C,D E)會自動include,不必再顯示引入。
  2. 可一旦你在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的項目中

IDEA - 調試Maven中的某一個dependency + 多module聯調
IDEA - 調試Maven中的某一個dependency + 多module聯調

找到帶有pom.xml的父目錄

IDEA - 調試Maven中的某一個dependency + 多module聯調
IDEA - 調試Maven中的某一個dependency + 多module聯調

 一路預設點選next

IDEA - 調試Maven中的某一個dependency + 多module聯調
IDEA - 調試Maven中的某一個dependency + 多module聯調

步驟2.2: 将B module設定為A module的dependency

 

IDEA - 調試Maven中的某一個dependency + 多module聯調
IDEA - 調試Maven中的某一個dependency + 多module聯調