1.现象
在本地打包成功,也可以运行成功。但是在k8s打包失败。然后看流水线,查看打包命令:mvn clean package -Dmaven.test.skip=true
2.原因分析
maven 命令打包,一般设置的不是强制更新策略。因此会拉取本地仓库的包。但是一旦该包内容更改,并deploy到远程仓库,最新包虽然在远程仓库。但是依然还是有这这问题。因此有2种方案,要么清除服务器的本地仓库。要么升级版本包,然后升级依赖该包的项目。(这个比较麻烦)
还有个潜在的问题,就是这个包只要更新,都要修改其他项目包,非常麻烦。
命令打包:
mvn install:install-file -Dfile=sdk-park-manage-V13.0.jar -DgroupId=com.pross.sdk -DartifactId=sdk-park-manage -Dversion=13.0-Release -Dpackaging=jar
mvn deploy:deploy-file -DgroupId=com.pross.sdk \
-DartifactId=sdk-park-manage \
-Dversion=13.0-Release \
-Dpackaging=jar \
-Dfile=sdk-park-manage-V13.0.jar \
-DrepositoryId=zhqc \
-Durl=http://XXXX:7181/repository/maven-releases/
3.解决方案
a.用SNAPSHOT作为版本
- 修改版本号为-SNAPSHOT结尾
- 被依赖方手动deploy到私库
- 依赖方无需处理,构建时会自动拉取最新依赖
- SNAPSHOT:引用版本为SNAPSHOT的依赖时,每次构建应用时都会重新下载依赖。
- RELEASE:如果发现本地已有这个版本,就不会去远程下载。
注意问题:再部署时有可能会发现部署报错
status: 400 Repository version policy: RELEASE does not allow metadata in path
这个错的原因就是:你部署的私服仓库的。设置的版本策略为Release。需要删除仓库,重新创建仓库,在版本策略选择上选择Snapshot 或者Mixed 。另一种办法就是设置jar包的RELEASE结尾。还要修改设置(pom.xml或者settings.xml),将repository和pluginRepository的updatePolicy改为alway。
b.升级版本