现象:
在maven的pom.xml依赖配置里加了一个SNAPSHOT版本的依赖:
<dependency> <groupId>com.yame.ecpark</groupId> <artifactId>ecpark-cache-driver</artifactId> <version>1.6.3-SNAPSHOT</version> </dependency>
程序运行到相关代码的时候,报了一个找不到类的异常:
这个Client类明明就在ecpark-cache-driver-1.6.3-SNAPSHOT.jar里面,并且打包好的lib文件夹里,也存在该
jar包:
为什么还报找不到类的异常呢??
想了好久,幸得高人同事指点,反编译maven打包后的jar文件,看看里面jar文件的依赖路径:
茅塞顿开!!!!
这里,Class-Path: ./ lib/ecpark-cache-driver-1.6.3-20180412.072035-2.jar lib,写得很清楚,依赖的ecpark-cache-driver版本带有时间日期版本,但lib包里的,只有一个ecpark-cache-driver-1.6.3-SNAPSHOT.jar,都不是同一个文件,所以就怪不得找不到Client类了。
知道问题原因之后,就好办了。
在maven打包时候,指定<useUniqueVersions>false</useUniqueVersions> ,如:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> <mainClass>com.yame.Application</mainClass> <useUniqueVersions>false</useUniqueVersions> </manifest> <manifestEntries> <Class-Path>./</Class-Path> </manifestEntries> </archive> </configuration> </plugin>
这样,在打包的时候,
MANIFEST.MF中的Class-Path: lib/ecpark-cache-driver-1.6.3-20180412.072035-2.jar
转化成Class-Path:/lib/ecpark-cache-driver-1.6.3-SNAPSHOT.jar
同时lib文件夹下面也存在ecpark-cache-driver-1.6.3-SNAPSHOT.jar,这样就不会报找不到类的异常了。