Skip to content

Jenkins 缺包java.lang.NoClassDefFoundError问题解决

问题描述

最近搭建了一套jenkins 环境,在使用gitlab hooks联动的时候,发现一直报错,检查后台日志发现错误日志如下:

java.lang.NoClassDefFoundError: com/fasterxml/jackson/jaxrs/json/JacksonJsonProvider
    at com.dabsquared.gitlabjenkins.gitlab.api.impl.ResteasyGitLabClientBuilder.buildClient(ResteasyGitLabClientBuilder.java:139)
    at com.dabsquared.gitlabjenkins.gitlab.api.impl.ResteasyGitLabClientBuilder.buildClient(ResteasyGitLabClientBuilder.java:91)
    at com.dabsquared.gitlabjenkins.gitlab.api.impl.AutodetectingGitLabClient.autodetect(AutodetectingGitLabClient.java:315)
    at com.dabsquared.gitlabjenkins.gitlab.api.impl.AutodetectingGitLabClient.autodetectOrDie(AutodetectingGitLabClient.java:305)
    at com.dabsquared.gitlabjenkins.gitlab.api.impl.AutodetectingGitLabClient.delegate(AutodetectingGitLabClient.java:298)
    at com.dabsquared.gitlabjenkins.gitlab.api.impl.AutodetectingGitLabClient.access$200(AutodetectingGitLabClient.java:14)
    at com.dabsquared.gitlabjenkins.gitlab.api.impl.AutodetectingGitLabClient$GitLabOperation.execute(AutodetectingGitLabClient.java:335)
    at com.dabsquared.gitlabjenkins.gitlab.api.impl.AutodetectingGitLabClient$GitLabOperation.access$100(AutodetectingGitLabClient.java:332)
    at com.dabsquared.gitlabjenkins.gitlab.api.impl.AutodetectingGitLabClient.execute(AutodetectingGitLabClient.java:328)
    at com.dabsquared.gitlabjenkins.gitlab.api.impl.AutodetectingGitLabClient.getCurrentUser(AutodetectingGitLabClient.java:242)
    at com.dabsquared.gitlabjenkins.connection.GitLabConnection$DescriptorImpl.doTestConnection(GitLabConnection.java:240)
    at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)
    at org.kohsuke.stapler.Function$MethodFunction.invoke(Function.java:393)
    at org.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:405)
    at org.kohsuke.stapler.interceptor.RequirePOST$Processor.invoke(RequirePOST.java:77)
    at org.kohsuke.stapler.PreInvokeInterceptedFunction.invoke(PreInvokeInterceptedFunction.java:26)
    at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:208)
    at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:141)
    at org.kohsuke.stapler.MetaClass$11.doDispatch(MetaClass.java:536)
    at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)
    at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:766)

解决思路

Jenkins默认为war包,缺失jar包,无法直接在war中添加,经过查询,jenkins在运行时的目录为:/var/cache/jenkins/war/,在此目录下: WEB-INF/lib,添加缺失的jar包,应该能解决此问题。

解决步骤

  1. 找到缺失的jar。(https://search.maven.org/ 中进行包路径搜索。)
  2. 找下载对应的jar.
  3. 复制jar到/var/cache/jenkins/war/WEB-INF/lib,重启服务。
  4. 如果查看日志,还有缺失,继续查找缺失的jar。

我遇到的情况添加了如下的jar:

-rw-r--r--. 1 root    root       75717 2月  25 19:01 jackson-annotations-2.13.1.jar
-rw-r--r--. 1 root    root      374588 2月  25 19:01 jackson-core-2.13.1.jar
-rw-r--r--. 1 root    root     1534017 2月  25 19:01 jackson-databind-2.13.1.jar
-rw-r--r--. 1 root    root       31148 2月  25 19:01 jackson-jaxrs-base-2.13.1.jar
-rw-r--r--. 1 root    root       13199 2月  25 19:01 jackson-jaxrs-cbor-provider-2.13.1.jar
-rw-r--r--. 1 root    root       15964 2月  25 19:01 jackson-jaxrs-json-provider-2.13.1.jar
-rw-r--r--. 1 root    root       14310 2月  25 19:01 jackson-jaxrs-xml-provider-2.13.1.jar
-rw-r--r--. 1 root    root       14737 2月  25 19:01 jackson-jaxrs-yaml-provider-2.13.1.jar
-rw-r--r--. 1 root    root      126898 2月  25 18:58 javax.ws.rs-api-2.1.1.jar

后续

这个解决办法只是具体问题具体解决,并不是完善的解决方式。可能是安装过程中的问题,也可能是插件的问题。如有更优方案,感谢分享下。

One Comment

  1. 友好的陌生人 友好的陌生人

    不是母语者。这是自动翻译的。

    在寻找这个错误的解决方案时发现了这个。看来这个错误是由GitLab插件和Jackson 2 API插件的不兼容版本引起的。因此,要么把两个插件都更新到合适的版本,要么–如果你的Jenkins实例太老了,就使用两个插件的匹配版本(例如,GitLab 1.5.27和Jackson 2 API 2.13.2-260.v43d711474c77)。

发表评论

电子邮件地址不会被公开。 必填项已用*标注