`

maven的SNAPSHOT依赖,找不到类解决方法

 
阅读更多

 

现象:

在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,这样就不会报找不到类的异常了。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 大小: 34.2 KB
  • 大小: 36.5 KB
  • 大小: 44.7 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics