使用maven快照版本,在本地运行、编译打包都不报错,但是运行期间出现java.lang.NoClassDefFoundError
最近在搭建maven的私服,将一些公共模块的jar设置成了快照版本。在IDEA中运行的时候没有问题,结果将项目打包部署到测试环境进行测试的时候发现,有时候会出现NoClassDefFoundError,而找不到的class就是公共模块中的类。
首先发现了快照版本在项目中依赖的jar包是带有时间戳的。将打包好的项目的jar包利用解压工具解压看了下里面的classpath(META-INF/MANIFEST.MF文件里面),对应的classpath是带了时间戳的jar,而lib目录下的jar确实不带时间戳的。
也就是说打包的时候出现了lib里面的jar和MANIFEST.MF里面的classpath没有对应上。感觉这个时候有两种解决方式,一是设置maven在引用快照版的时候,不要使用带时间戳后缀的jar;二是在项目打包的时候,使MANIFEST.MF里面的classpath的jar不要时间戳的后缀。
目前,我才用的是第一种方式,在pom文件中加上false,这样引用快照的时候,就只会加载不带后缀的jar了。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<addMavenDescriptor>false</addMavenDescriptor>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>{主类}</mainClass>
<useUniqueVersions>false</useUniqueVersions>
</manifest>
<manifestEntries>
<Class-Path>resources/</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>