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

 

 

 

易錯點

關於遞歸引入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必須相同

 關於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-各模塊間不能引用問題的解決方法

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM