《Maven实战》笔记 2.5 - 依赖的调解

Maven的依赖调解机制

 

  1.如果存在App->A->B-0.9, 又存在App->C->D->B-1.0,那App在打包时会不会把B-0.9和B-1.0都纳入进来?如果不会,倒底选择哪个B?

   答案:只会纳入一个,即B-0.9,因为它离App较近(中间只隔了一个A,B-1.0和App之间则隔了D,C两个)

  2.App到B存在两条依赖路径,怎么识别这种情况?

   答案: mvn dependency:tree
-Dverbose,它会显示哪些项目由于这种情况而被“omitted for conflict”

  3.B-0.9被选中,会不会导致依赖B-1.0的D在运行时出错?

   答案:会的。如果D依赖了B-1.0中有而B-0.9里没有的东西,就会在运行时出错

  4.那该怎么办?

   答案:

     办法1. 在App的pom里,屏蔽掉A对B的依赖

		<dependency>
			<groupId>kent.learn</groupId>
			<artifactId>maven-a</artifactId>			
			<exclusions>
				<exclusion>
					<groupId>kent.learn</groupId>
					<artifactId>maven-b</artifactId>
				</exclusion>
			</exclusions>				
		</dependency>

     办法2. 让App直接依赖B-1.0,让其他的对B的传递依赖都失效

Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.