情景
项目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
易错点
- 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.
步骤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-各模块间不能引用问题的解决方法