当前位置: 首页 > 面试题库 >

Jenkins插件的spring-core依赖版本错误

长孙高远
2023-03-14
问题内容

我正在尝试制作一个Jenkins插件,该插件使用需要spring-core 3.2.2(cloudfoundry-client-
lib)的库
。我只是使用mvn命令创建一个骨架插件,然后将我的Maven依赖项添加到pom.xml和一些使用该库的简单代码行。在没有我的依赖的情况下,运行骨架插件没有任何问题。

使用“ mvn软件包”进行编译时,出现测试错误:

WARNING: Failed to scout hudson.security.PAMSecurityRealm
java.lang.InstantiationException: java.lang.NoClassDefFoundError: org/springframework/core/env/EnvironmentCapable

看起来这是一个出现在spring-core 3.1.0中的类。所以我看了一下Maven依赖树:

[INFO] --- maven-dependency-plugin:2.3:tree (default-cli) @ stackato-jenkins ---
[INFO] org.wiwiweb:cf-test-jenkins:hpi:1.0-SNAPSHOT
[INFO] \- org.cloudfoundry:cloudfoundry-client-lib:jar:1.0.2:compile
[INFO]    \- org.springframework:spring-webmvc:jar:3.2.2.RELEASE:compile
[INFO]       \- org.springframework:spring-core:jar:2.5.6.SEC03:compile

所以Maven告诉我它使用spring-core 2.5.6是因为spring-webmvc 3.2.2?这很奇怪,因为在网上看,spring-
webmvc 3.2.2依赖于spring-core
3.2.2
。看着树的详细版本,看起来jenkins-core依赖于spring-core
2.5.6。这使我怀疑问题出在Jenkins。

无论如何,如果只是版本冲突,那么可以通过明确地说我想要pom.xml中的spring-core
3.2.2来覆盖Maven的决定,对吧?我这样做了,然后没有得到编译错误。问题解决了!

在运行时中,在Jenkins中激活此插件并使用此插件运行构建后,一旦代码运行到使用我添加的库的行中,Jenkins的输出就会告诉我:

FATAL: org.springframework.util.CollectionUtils.unmodifiableMultiValueMap(Lorg/springframework/util/MultiValueMap;)Lorg/springframework/util/MultiValueMap;
java.lang.NoSuchMethodError: org.springframework.util.CollectionUtils.unmodifiableMultiValueMap(Lorg/springframework/util/MultiValueMap;)Lorg/springframework/util/MultiValueMap;

unmodifiableableMultiValueMap()是spring-core
3.1中添加的一种方法,因此这意味着Jenkins仍在尝试使用旧版本的spring-core运行我的插件,即使我明确地说我想要插件pom中的最新插件。
xml!

所以我坚持了这一点。我什至不确定这是Maven还是Jenkins问题。我将用两个问题来总结整个问题:

  1. 除非我明确告诉他,为什么Maven不能使用正确版本的spring-core编译插件?它应该能够遵循依赖关系,而无需我给出提示。
  2. 为什么Jenkins在运行我的插件时使用的spring-core版本要比其编译时的版本旧,我如何使它使用正确的插件?

在此先感谢您提供的任何提示,这阻碍了我的进度,并且我已经尝试解决了一段时间。


问题答案:

如果您是从Jenkins安装而不是从插件中获取依赖关系,则该解决方案实际上很容易实现。根据Jenkins文档,只需将maven-
hpi-plugin添加到Jenkins插件的pom.xml中的版本中,并将其设置为首先加载插件类:

<build>
    <plugins>
        <plugin>
            <groupId>org.jenkins-ci.tools</groupId>
            <artifactId>maven-hpi-plugin</artifactId>
            <configuration>
                <pluginFirstClassLoader>true</pluginFirstClassLoader>
            </configuration>
        </plugin>
    </plugins>
</build>


 类似资料:
  • Semantic Versioning Packages in Yarn follow Semantic Versioning, also known as “semver”. When you install a new package from the registry it will be added to your package.json with a semver version ra

  • 问题内容: 我想使用 版本号插件 来格式化BUILD_NUMBER变量。 我在下面的方式进行配置的: 图片 环境变量名称:FORMATTED_BUILD_NUMBER版本号格式字符串:$ {BUILD_NUMBER,XXX} 但是,当我使用FORMATTED_BUILD_NUMBER变量($ {FORMATTED_BUILD_NUMBER})时,它将返回未格式化的内部版本号。 所以我想看到类似的东

  • Package dependencies are critical to the success of a package. When you develop the functionality of your package, you will very likely use existing code defined in other packages. Those packages then

  • 我有两个Spring Boot项目,并希望使用其中一个作为MAVEN依赖在其他。 项目刮板取决于数据库项目 项目数据库包含数据库层(实体和DAO在此构建和测试) 在数据库项目中,我必须重写Hibernate版本,并按照选项2中https://spring.io/blog/2016/04/13/overriding-dependency-versions-with-spring-boot描述。 这很

  • 依赖 AdminLTE 依赖两个主要的框架。下载的软件包中已经包含这两个库,因此你不必手动下载它们。 Bootstrap 4 jQuery 3.3.1+ Popper.js 1.14.7+ 下面列出了所有其他插件 插件 AdminLTE 使用以下插件。相关文档,更新或许可证信息,请访问提供的链接。 你需要手动加载插件的 js/css 文件。 AdminLTE 不会自动加载所有插件,这会造成页面加载

  • 我使用的是Spring Boot版本。我在2.11.1版本中使用jackson-annotations、jackson-databind、jackson-core、jackson-dataformat-xml。 我想将jackson依赖项更新到2.12.4。spring-boot-starter在内部使用jackson依赖项。我有两种方法可以实现它 它将把所有jackson依赖项更新到2.12.4