Maven类包冲突终极解决小技若干.pdfVIP

  • 4
  • 0
  • 约 7页
  • 2017-05-27 发布于河南
  • 举报
Maven类包冲突终极解决小技若干

Maven 类包冲突终极解决小技若干 引言 Maven 对于新手来说是《步步惊心》,因为它包罗万象,博大精深,因为当你初来乍到时, 你就像一个进入森林的陌生访客一样迷茫。 Maven 对于老手来说是《真爱配方》,因为它无所不能,利如刀锋,使用Maven 做开发, 如饮美酒如悦美人。 Maven 对于新手来说,最痛苦的一件事莫过于包之间的冲突,由于Maven 的依赖传递性, 当你引入一个依赖类时,其身后的依赖类也一起如过江之鲫纷至沓来了。 举个栗子 A 依赖于B 及C,而B 又依赖于X 、Y ,而C 依赖于X 、M,则A 除引B 及C 的依赖包下, 还会引入X ,Y ,M 的依赖包(一般情况下了,Maven 可通过scope等若干种方式控制传 递依赖)。 这里有一个需要特别注意的,即B 和C 同时依赖于X ,假设B 依赖于X 的1.0 版本,而C 依赖于X 的2.0 版本,A 究竟依赖于X 的1.0 还是2.0 版本呢? 这就看Classloader 的加载顺序了,假设Classloader 先加载X_1.0 ,而它就不会再加载X_2.0 了,如果A 恰恰希望使用X_2.0 呢,血案就这样不期而遇了。 我常抡的三板斧 第一板斧:找到传递依赖的鬼出在哪里? dependency:tree 是把照妖照,pom.xml 用它照照,所有传递性依赖都将无处遁形,并且会 以层级树方式展现,非常直观。 以下就是执行dependency:tree 后的一个输出: 引用 [INFO] maven-dependency-plugin:2.1:tree (default-cli) @ euler-foundation [INFO] com.hsit:euler-foundation:jar:0.9.0.1-SNAPSHOT [INFO] +- com.rop:rop:jar:1.0.1:compile [INFO] | +- org.slf4j:slf4j-api:jar:1.7.5:compile [INFO] | +- org.slf4j:slf4j-log4j12:jar:1.7.5:compile [INFO] | +- log4j:log4j:jar:1.2.16:compile [INFO] | +- commons-lang:commons-lang:jar:2.6:compile [INFO] | +- commons-codec:commons-codec:jar:1.6:compile [INFO] | +- javax.validation:validation-api:jar:1.0.0.GA:compile [INFO] | +- org.hibernate:hibernate-validator:jar:4.2.0.Final:compile [INFO] | +- org.codehaus.jackson:jackson-core-asl:jar:1.9.5:compile [INFO] | +- org.codehaus.jackson:jackson-mapper-asl:jar:1.9.5:compile [INFO] | +- org.codehaus.jackson:jackson-jaxrs:jar:1.9.5:compile [INFO] | +- org.codehaus.jackson:jackson-xc:jar:1.9.5:compile [INFO] | \- com.fasterxml.jackson.dataformat:jackson-dataformat-xml:jar:2.2.3:compile [INFO] | +- com.fasterxml.jackson.core:jackson-core:jar:2.2.3:compile [INFO] | +- com.fasterxml.jackson.core:jackson-annotations:jar:2.2.3:compile [INFO] | +- com.fasterxml.jackson.core:jackson-databind:jar:2.2.3:compile [INFO] | +- com.fasterxml.jackson.module:jackson-module-jaxb-annotations:jar:2.2.3:compile [INFO] | \- org.codehaus.woodstox:stax2-api:jar:3.1.1:compile [INF

文档评论(0)

1亿VIP精品文档

相关文档