4

我有一个安装了 openid 插件的詹金斯。我尝试通过 openid 进行身份验证,但收到一个抱怨java.lang.NoClassDefFoundError: org/openid4java/util/OpenID4JavaDOMParser.

缺少的类包含在位于“plugins/openid/WEB-INF/lib/”的 jar 中。

为什么 Jenkins 无法加载该类?

任何想法如何调试?(除了 NoClassDefFoundError 之外,日志文件没有提供更多信息。)

更新:将 jar 符号链接到“war/WEB-INF/lib”后,jenkins 能够访问该类。似乎插件中的 jar 被简单地忽略了,但根据文档,它们应该是可访问的。

4

1 回答 1

0

这取决于试图加载类的类加载器,如果它被某个库初始化或发现它可能使用 Thread 类加载器而不是你的插件类加载器,这通常是一个ClassicPluginStrategy$AntClassLoader2.

您可以选择传递类加载器或直接创建实例。我对 jax-rs 有同样的问题,并以这种方式修复了它。

https://github.com/carlossg/KubernetesAPIJavaClient/blob/c6082e3/src/main/java/com/github/kubernetes/java/client/v2/RestFactory.java#L66

于 2015-01-26T17:57:53.583 回答