【问题标题】:Jenkins plugin using class from another plugin, not Maven dependencyJenkins 插件使用来自另一个插件的类,而不是 Maven 依赖项
【发布时间】:2020-09-25 14:18:44
【问题描述】:

我正在尝试通过其中一个插件来克服一些依赖差异,方法是删除对 j​​ackson2-api 插件的依赖,并改用直接 jackson maven 依赖。

甚至有可能做这样的事情吗?因为它似乎效果不佳。

https://github.com/cvakiitho/build-failure-analyzer-plugin/commit/c51ed3fbed62f7bb30a854ba8fcea5831649f1d2

BFA 插件似乎仍然使用 jackson2-api 插件中的 jackson 类,而不是直接的 maven 依赖项。 导致https://issues.jenkins-ci.org/browse/JENKINS-62214 在 MongoJack 的 import 中使用了错误的 jackson 版本,导致缺少方法:

java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.introspect.Annotated.getGenericType()Ljava/lang/reflect/Type;
    at org.mongojack.internal.MongoAnnotationIntrospector.getTypeForAnnotated(MongoAnnotationIntrospector.java:81)
    at org.mongojack.internal.MongoAnnotationIntrospector.findDeserializer(MongoAnnotationIntrospector.java:97)

在 jenkins 的类路径中,Jackson2-api 插件的依赖性是否更高?

【问题讨论】:

    标签: jenkins jenkins-plugins


    【解决方案1】:

    无法直接回答您,但运行 mvn dependency:analyzemvn dependency:tree 应该可以指导您。

    analyze 报告:

    [INFO] --- maven-dependency-plugin:3.1.1:analyze (default-cli) @ build-failure-analyzer ---
    [WARNING] Used undeclared dependencies found:
    [WARNING]    com.fasterxml.jackson.core:jackson-annotations:jar:2.10.2:compile
    [WARNING]    com.fasterxml.jackson.core:jackson-databind:jar:2.10.2:compile
    [WARNING] Unused declared dependencies found:
    [WARNING]    org.jenkins-ci.plugins:jackson2-api:jar:2.10.2:compile
    

    dependency:tree 报告(选择性列表):

    [WARNING] Using Maven 2 dependency tree to get verbose output, which may be inconsistent with actual Maven 3 resolution
    [INFO] com.sonyericsson.jenkins.plugins.bfa:build-failure-analyzer:hpi:1.27.2-SNAPSHOT
    [INFO] +- com.sonyericsson.hudson.plugins.gerrit:gerrit-trigger:jar:2.27.5:compile
     ...
    [INFO] +- org.jenkins-ci.plugins:slack:jar:2.30:compile
    [INFO] |  +- (org.jenkins-ci.plugins:jackson2-api:jar:2.9.9.1:compile - omitted for conflict with 2.10.2)
     ...
    [INFO] +- org.mongodb:mongo-java-driver:jar:3.8.2:compile
    [INFO] +- org.mongojack:mongojack:jar:2.9.4:compile
    [INFO] |  +- org.mongodb:mongodb-driver:jar:3.8.0:compile
    [INFO] |  |  +- org.mongodb:bson:jar:3.8.0:compile
    [INFO] |  |  \- org.mongodb:mongodb-driver-core:jar:3.8.0:compile
    [INFO] |  |     \- (org.mongodb:bson:jar:3.8.0:compile - omitted for duplicate)
    [INFO] |  +- de.undercouch:bson4jackson:jar:2.9.2:compile
    [INFO] |  |  \- (com.fasterxml.jackson.core:jackson-core:jar:2.9.3:compile - omitted for conflict with 2.9.9)
    [INFO] |  +- javax.persistence:persistence-api:jar:1.0.2:compile
    [INFO] |  \- commons-io:commons-io:jar:2.6:compile
    [INFO] +- org.jenkins-ci.plugins:jackson2-api:jar:2.10.2:compile
    [INFO] |  +- com.fasterxml.jackson.core:jackson-databind:jar:2.10.2:compile
    [INFO] |  |  +- com.fasterxml.jackson.core:jackson-annotations:jar:2.10.2:compile
    [INFO] |  |  \- (com.fasterxml.jackson.core:jackson-core:jar:2.10.2:compile - omitted for duplicate)
    [INFO] |  +- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.10.2:compile
    [INFO] |  |  +- (com.fasterxml.jackson.core:jackson-annotations:jar:2.10.2:compile - omitted for duplicate)
    [INFO] |  |  +- (com.fasterxml.jackson.core:jackson-core:jar:2.10.2:compile - omitted for duplicate)
    [INFO] |  |  \- (com.fasterxml.jackson.core:jackson-databind:jar:2.10.2:compile - omitted for duplicate)
    [INFO] |  +- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:2.10.2:compile
    [INFO] |  |  +- (com.fasterxml.jackson.core:jackson-core:jar:2.10.2:compile - omitted for duplicate)
    [INFO] |  |  \- (com.fasterxml.jackson.core:jackson-databind:jar:2.10.2:compile - omitted for duplicate)
    [INFO] |  +- com.fasterxml.jackson.module:jackson-module-parameter-names:jar:2.10.2:compile
    [INFO] |  |  +- (com.fasterxml.jackson.core:jackson-core:jar:2.10.2:compile - omitted for duplicate)
    [INFO] |  |  \- (com.fasterxml.jackson.core:jackson-databind:jar:2.10.2:compile - omitted for duplicate)
    [INFO] |  +- com.fasterxml.jackson.core:jackson-core:jar:2.10.2:compile
    [INFO] |  \- com.fasterxml.jackson.module:jackson-module-jaxb-annotations:jar:2.10.2:compile
    [INFO] |     +- (com.fasterxml.jackson.core:jackson-annotations:jar:2.10.2:compile - omitted for duplicate)
    [INFO] |     +- (com.fasterxml.jackson.core:jackson-core:jar:2.10.2:compile - omitted for duplicate)
    [INFO] |     +- (com.fasterxml.jackson.core:jackson-databind:jar:2.10.2:compile - omitted for duplicate)
    [INFO] |     +- jakarta.xml.bind:jakarta.xml.bind-api:jar:2.3.2:compile
    [INFO] |     |  \- (jakarta.activation:jakarta.activation-api:jar:1.2.1:compile - omitted for duplicate)
    [INFO] |     \- jakarta.activation:jakarta.activation-api:jar:1.2.1:compile
    

    因此,dependency resolution 采用直接/声明的依赖项将覆盖未声明/传递的依赖项(并且较高的 #.#.# 较低)。

    【讨论】:

    • 是的,问题是,我从所有依赖项中删除了 jackson2-api。 mvn dependency:tree | grep jackson2-api - 空。但是插件安装在 jenkins 上,所以它的类是全局可用的。猜猜一些詹金斯内部人员正在制作类>依赖树中的所有其他内容。
    • 从 BFA 根 pom.xml 中删除了 org.jenkins-ci.plugins:jackson2-api:2.10.2,但是否添加了 com.fasterxml.jackson.core:jackson-annotations:2.10.2com.fasterxml.jackson.core:jackson-databind:2.10.2(或 2.9.9),因为它们是唯一使用的依赖项? 结果是什么? ps:方法似乎与 Jenkins 提供 Jackson2-API 包装器背道而驰。似乎问题在于 JIRA 问题中指出的 w/mongoDB,应该在那里解决。
    • 请注意,latest pom.xml 排除了com.fasterxml.jackson.core:*org.mongojack:mongojack 的直接依赖关系,因此它们将从“最近的”继承,现在将是BFA 根@987654339 @,通过 jackson2-api 引用。如果不排除会引用 mongojack pom 中的内容。
    • 是的,我删除了那些:github.com/cvakiitho/build-failure-analyzer-plugin/commit/… 不走运
    • 结果如何?;和上面一样吗?您的最新更改仍然包括对jackson2-api 的直接依赖。不知道你想走哪条路。
    猜你喜欢
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 2017-10-28
    • 1970-01-01
    • 1970-01-01
    • 2013-01-04
    相关资源
    最近更新 更多