在本次做系统升级的过程中遇到了一些坑,代码拉下来后,jenkins编译不通过。
报错大概为:
package lombok does not exist
IDE里面需要安装lombok插件,但是对于jenkins编译来说,本身与lombok没有关系才对。maven配置里面应该都包含了编译所需的依赖。(在开发商的本地开发环境都可以编译成功)
按照网上资料处理:添加依赖和plugin
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
</dependency>
<plugin>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-maven-plugin</artifactId>
<version>1.16.18.1</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>delombok</goal>
</goals>
</execution>
</executions>
</plugin>
不再报lombok的错误,但是仍然有异常:
package cn.hutool.core.bean does not exist
这就很奇怪了,hutool是项目依赖的jar包,说明该jar包没有被正常使用。但是明明该jar包在pom里面有配置(在一个依赖的framework的jar包里面依赖的,这个就是导致该坑的地方),而且framework应该也被成功下载了(如果没有找到该包,也会提示无法找到framework jar)。
改成本地IDEA里面进行build,看看是否有问题。结果IDEA里面pom中的依赖(之前手动上传到nexus repository的jar包)一直异常,无法正常下载。
难道是通过nexus repository页面手动上传jar包有问题?于是尝试通过命令行的方式进行上传jar包:
mvn deploy:deploy-file -DgroupId=xxx -DartifactId=yyy -Dversion=1.1.0 -Dpackaging=jar -Dfile=./zzz.jar -Durl=http://xxxx -DrepositoryId=kkk
成功上传后,重新reload maven依赖包,一切正常。build一下,竟然还是报错,提示一些类无法找到(本地提示的是org.springframework.data.*找不到),这就更奇怪了为啥会出现依赖包找不到的情况。
这时好奇是不是该依赖包就没有在pom里面配置呢?打开maven dependency analyzer查看依赖树,果然并没有所需要的jar包依赖。说明pom依赖配置有问题,可是开发商为啥又是能正常build呢。于是决定查看一下repository里面手动上传的jar包文件与其他的jar包文件有啥区别,结果点进去查看xxx.pom文件后,发现里面竟然只有很简单的内容:
<modelVersion>4.0.0</modelVersion>
<groupId>com.xxx</groupId>
<artifactId>xxxx</artifactId>
<version>1.0</version>
明显有问题啊,该framework包应该有不少依赖才对。说明上传过程中,自动生成的pom文件内容有问题,没有把依赖的内容加进去。查询资料,deploy命令中指定pom文件,然后重新上传:
mvn deploy:deploy-file -DgroupId=xxxxx -DartifactId=yyyyy -Dversion=1.1.0 -Dpackaging=jar -Dfile=./zzzz.jar -Durl=http://xxxx -DrepositoryId=kkkk -DgeneratePom=true -DpomFile=./pom.xml
通过pomFile指定了pom文件后,上传的jar一切正常,重新本地打包,顺利通过。再在jenkins上执行构建,一切顺利。
说明1:
根因就是对于maven repository上传jar时自动生成的pom文件只是一个minimal的pom内容,没有依赖信息。如果需要保留dependency信息,需要手动指定pom.xml
另外,对于单纯上传一个Pom文件(通常是作为parent pom来使用),也使用类似的命令:
mvn deploy:deploy-file -Dfile=./xxxx.pom -DgroupId=yyy -DartifactId=zzzz -DrepositoryId=hhh -Durl=http://xxxx/ -Dversion=1.1.1