jar包冲突 maven

近期在开发一个maven项目的时候,遇到了这样的报错:

java.lang.NoClassDefFoundError: com/google/common/base/MoreObjects

NoClassDefFoundError解决的三种办法(参考:https://my.oschina.net/jasonultimate/blog/166932):

1.首先是类在运行的时候依赖于其它的一个jar包,但是该jar包没有加载到classpath中或者是该jar包的名字被其他人改了,就像我的一个例子tibo.jar改为了tibco_v3.jar…….

2.运行的类不在classpath中,这个问题没有一个确定的方法去知道,但是很多时候你可以通过System.getproperty(”java.classpath“)方法,该方法能让你至少可以领略到实际存在的运行期间的classpath。

3.试着通过-classpath命令明确指出你认为正确的classpath,如果能够正常执行的话就说明你使用的classpath是正确的,而系统中的classpath已经被修该过了

 这里只详细讲第一种情况。

遇到NoClassDefFoundError报错后,查看项目中是否有MoreObjects这个类,如果没有,pom文件中加入缺少的依赖。如果有,进入该类,查看它所在的jar包是否存在冲突(比如不同版本的同种jar包),发现冲突后,进入对应的pom文件,然后如图



 显示依赖关系

 根据这个依赖关系,可以找出jar包被谁依赖,逐步解决冲突。

我的项目中需要依赖guava19.0但是之前的许多相关联的项目中都间接依赖了guava14.0,如果14依赖的少,可以逐个exclude,但是依赖过多就不行了。

可以在根pom中写明,这样就会优先选择你指定的版本了

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>19.0</version>
        </dependency>
        <dependency>
            <groupId>com.google.protobuf</groupId>
            <artifactId>protobuf-java</artifactId>
            <version>3.0.0</version>
        </dependency>
    </dependencies>
</dependencyManagement>

祝好运。

猜你喜欢

转载自zlele.iteye.com/blog/2348193