问题描述
因公司项目调整,需要为jar包添加版本号。之前jar包命名格式一直是XXXX.0.0.1-SNAPSHOT.jar。修改后的格式是XXXX.1.0.0.${environment}.jar(environment:DEV、TEST、RELEASE)。修改之后通过jenkis构建gralde项目时却报错,提示找不到依赖的某模块A中的代码。
问题排查
出现这种问题,第一想法是依赖的模块没有上传到私有代码仓库,导致部署时拉取的依赖jar包还是历史jar包。但是通过观察代码仓库jar包的生成时间确实是最新的,而且反编译jar包之后,代码也是最新的。既然代码是最新的,那么就说明gradle构建项目时,没有从仓库拉取最新的jar包。但是为什修改jar包命名格式之前并没有这种问题呢?
带着这种疑问通过网上搜索,最终发现加和不加SNAPSHOT的区别如下:
- 加了SNAPSHOT后缀,gradle 会认为该 jar包只是快照版本,是不稳定的、会经常性更新的。这种状态下,我们修改jar包的内容后不需要修改版本号,相同版本的jar包也是可以被覆盖为最新的。
- 不加SNAPSHOT后缀时,表示该jar包是稳定版本,只有更新版本号才会覆盖历史jar包。
看到这里我们也就清晰了,由于我们的jar包没有加SNAPSHOT后缀,gradle会认为是稳定版,而且我们又没有变更版本号,因此导致不会拉取最新jar包,那要怎么解决呢?有两种办法如下: