情景

项目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

易错点

  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.

步骤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-各模块间不能引用问题的解决方法

 

12-21 23:51