又出状况了!
在项目中我们自己封装了一个服务,作为基础jar包,引入在各个服务中,我们称之为zijixiedebao.jar。
然而在执行编译ServiceA包的时候发现,jenkins服务器上并没有这个包……
一、引入zijixiedebao.jar
1、上传jar包
为了方便,我从本机的maven仓库里将zijixiedebao.jar上传到jenkins服务器。
好像不行。
2、本地安装
mvn install:install-file -Dfile=zijixiedebao.jar -DgroupId=com.zijidegroup -DartifactId=zijixiedebao -Dversion=1.0 -Dpackaging=jar
安装成功!
还是不行,因为zijixiedebao.jar还需要很多依赖,jenkins服务器还是没有。
3、源码安装
上传zijixiedebao项目的源码到jenkins服务器。
mvn install
安装成功!
二、编译失败
jenkins依然显示找不到zijixiedebao.jar包,无法引入。可是从服务器的默认仓库能够看到jar包,在服务器上直接编译ServiceA包也通过了。
那么真相只有一个,jenkins并没有使用默认仓库。(耽误了很久,但其实从console来看,ServiceA的编译过程中重新下载了pom的各个依赖,显然跟我们已经在服务器上直接编译ServiceA成功是矛盾的。)
三、修改Jenkins系统配置
1、configure配置
修改Maven项目配置-全局MAVEN_OPTS
增加 -Dmaven.repo.local=/本地仓库
这样在做maven编译的时候会增加这个参数,指定本地仓库。
失败了。
Could not create local repository at 本地仓库
(马后炮:当时本地仓库在/root目录下,是不是权限问题呢?)
2、configureTools全局工具配置
修改Maven配置-默认settings提供、默认全局settings提供
/本地maven/conf/settings.xml
失败了。并没有好转。
3、修改settings
突然发现console中的信息
Reading user toolchains from /jenkins主目录/.m2/toolchains.xml
什么?jenkins还有自己的.m2?
好的,我决定直接修改maven 的settings
vi /本地maven/conf/settings.xml
找到<localRepository>标签
增加/修改为
<localRepository>/jenkins主目录/.m2/repository</localRepository>
新的失败。
但是已经能够找到zijixiedebao.jar了!成功……50%!
4、权限修改
Failed to transfer Could not transfer artifact org.springframework.boot:spring-boot-starter-parent:pom:1.5.3.RELEASE from/to central (http://repo.maven.apache.org/maven2): /root/.m2/repository/org/springframework/boot/spring-boot-starter-parent/1.5.3.RELEASE/spring-boot-starter-parent-1.5.3.RELEASE.pom.part.lock (权限不够)
这个看起来很好解决
chmod 777 -R /jenkins主目录/.m2/repository
成功!
5、遗留问题
Failed to execute goal on project ServiceA: Could not resolve dependencies for project ServiceA: Failed to collect dependencies at zijixiedebao.jar -> org.aspectj:aspectjrt:jar:1.8.10: Failed to read artifact descriptor for org.aspectj:aspectjrt:jar:1.8.10: Could not transfer artifact org.aspectj:aspectjrt:pom:1.8.10 from/to central (https://repo.maven.apache.org/maven2): /jenkins主目录/.m2/repository/org/aspectj/aspectjrt/1.8.10/aspectjrt-1.8.10.pom.part.lock (没有那个文件或目录)
这个问题的诡异点在于, zijixiedebao.jar中引入的apsectjrt的版本是1.8.9,然而这里却在加载1.8.10,所以找不到依赖。
然后我尝试在jenkins服务器本地对ServiceA编译运行,果然在下载依赖时看到了1.8.10版本。
这,至今仍然是一个谜。
(当然由于ServiceA的本地编译,1.8.10成功下载到了仓库中,再通过jenkins编译就没有报错了!)