【问题标题】:Can a jenkins plugin use a different version of a jar than the main jenkins webapp?jenkins 插件可以使用与主要 jenkins webapp 不同版本的 jar 吗?
【发布时间】:2015-10-07 14:28:28
【问题描述】:
我正在开发一个 Jenkins 插件并包含一个 jar 作为依赖项 - 但该 jar 已包含在 Jenkins 主 webapp 的 WEB-INF/lib 目录中。这很好,除了我的插件需要版本 X 并且 Jenkins 包含版本 Y,并且它们之间的 api 发生了变化,所以我不能使用旧的,而 Jenkins 也不能使用新的。
我想要的版本包含在我的 .hpi 文件中,但在运行时会获取来自 jenkins/WEB-INF/lib 的版本。我猜由于类加载器,我无法强制它获取我的 .hpi 文件中的版本,但想检查一下是否有人知道这样做的方法?
谢谢。
【问题讨论】:
标签:
java
maven
jenkins
classloader
jenkins-plugins
【解决方案1】:
默认情况下,Jenkins 从 WEB-INF/lib 加载每个 jar,以及核心的类和库之后的 WEB-INF/classes 的内容。
如果您想在这些之前加载自己的库(例如,您想要更新版本的速度或其他库),您可以通过在 中告诉 hpi 插件来配置您的插件以使用不同的类加载器策略pom.xml:
<build>
<plugins>
<plugin>
<groupId>org.jenkins-ci.tools</groupId>
<artifactId>maven-hpi-plugin</artifactId>
<configuration>
<pluginFirstClassLoader>true</pluginFirstClassLoader>
</configuration>
</plugin>
</plugins>
</build>
更多详情请见docs。