使用maven快照版本,在本地运行、编译打包都不报错,但是运行期间出现java.lang.NoClassDefFoundError

使用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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值