Jenkins流水线SVN Checkout报错java.lang.ClassNotFoundException: org.apache.commons.digester.Digester
问题背景
环境版本
- Jenkins Version: 2.303.3
- Pipeline: SCM Step Version: 2.13
操作场景
使用Pipeline SCM Step插件执行SVN代码检出,Pipeline配置如下:
checkout([$class: 'SubversionSCM', additionalCredentials: [], excludedCommitMessages: '', excludedRegions: '', excludedRevprop: '', excludedUsers: '', filterChangelog: false, ignoreDirPropChanges: false, includedRegions: '', locations: [[cancelProcessOnExternalsFail: true, credentialsId: '<credential-id>', depthOption: 'infinity', ignoreExternalsOption: true, local: '<folder-to-checkout>', remote: '<path-to-checkout>']], quietOperation: true, workspaceUpdater: [$class: 'UpdateWithCleanUpdater']])
报错信息
执行上述检出操作时抛出如下异常:
java.lang.ClassNotFoundException: org.apache.commons.digester.Digester at jenkins.util.AntClassLoader.findClassInComponents(AntClassLoader.java:1393) at jenkins.util.AntClassLoader.findClass(AntClassLoader.java:1348) at jenkins.util.AntClassLoader.loadClass(AntClassLoader.java:1094) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) Caused: java.lang.NoClassDefFoundError: org/apache/commons/digester/Digester at hudson.scm.SubversionSCM.createChangeLogParser(SubversionSCM.java:1539) at org.jenkinsci.plugins.workflow.job.WorkflowRun.onCheckout(WorkflowRun.java:871) at org.jenkinsci.plugins.workflow.job.WorkflowRun.access$1000(WorkflowRun.java:137) at org.jenkinsci.plugins.workflow.job.WorkflowRun$SCMListenerImpl.onCheckout(WorkflowRun.java:1168) at org.jenkinsci.plugins.workflow.steps.scm.SCMStep.checkout(SCMStep.java:155) at org.jenkinsci.plugins.workflow.steps.scm.SCMStep$StepExecutionImpl.run(SCMStep.java:97) at org.jenkinsci.plugins.workflow.steps.scm.SCMStep$StepExecutionImpl.run(SCMStep.java:84) at org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution.lambda$start$0(SynchronousNonBlockingStepExecution.java:47) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748)
问题原因分析
该错误的典型诱因如下:
- Subversion插件依赖缺失
错误核心是Jenkins运行时找不到org.apache.commons.digester.Digester类,该类属于Apache Commons Digester组件,是Jenkins Subversion(SVN)插件的强制依赖。大概率是SVN插件安装过程中依赖包下载不全,导致Digester组件没有被正确部署到Jenkins类路径下。 - 插件版本冲突
你使用的Jenkins 2.303.3属于LTS版本,对应适配的Subversion插件版本范围固定,如果当前安装的Subversion插件版本过高/过低,和Jenkins核心、Pipeline SCM Step 2.13版本的依赖冲突,也会出现类加载失败问题。比如部分高版本Subversion插件对Jenkins核心版本要求高于2.303.3,强行安装就会出现依赖类找不到的情况。 - 类加载器隔离冲突
Jenkins使用AntClassLoader实现插件类隔离,如果有其他自定义安装的插件也捆绑了不同版本的Commons Digester组件,会触发类加载冲突,导致SVN插件加载到错误版本的Digester类,或者完全无法加载对应类。
解决方案
- 进入Jenkins插件管理页面,检查Subversion插件的安装状态,确认无依赖缺失提示,如有依赖警告直接点击修复依赖即可。
- 确认Subversion插件版本和Jenkins 2.303.3适配,可卸载当前Subversion插件后,重新安装对应Jenkins 2.303.3适配的最新兼容版本。
- 如安装后依旧报错,手动重启Jenkins实例,触发全量插件依赖重新加载,排除临时类加载异常问题。
内容的提问来源于stack exchange,提问作者Alpha
相关产品推荐
相关产品推荐

