Плагин Дженкинса, использующий класс из другого плагина, а не зависимость от Maven

#jenkins #jenkins-plugins

#Дженкинс #Дженкинс-плагины

Вопрос:

Я пытаюсь преодолеть некоторое несоответствие зависимостей с помощью одного из плагинов, удалив зависимость от плагина jackson2-api и вместо этого используя прямую зависимость jackson maven.

Возможно ли вообще сделать что-то подобное? потому что, похоже, он работает плохо.

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

Плагин BFA, похоже, по-прежнему использует классы Джексона из плагина jackson2-api, а не прямую зависимость от maven. в результате https://issues.jenkins-ci.org/browse/JENKINS-62214 где при импорте внутри MongoJack используется неправильная версия 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)
  

Является ли зависимость от плагина Jackson2-api каким-то образом выше в пути к классу в jenkins?

Ответ №1:

Не могу ответить вам напрямую, но работает mvn dependency:analyze и mvn 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
  

Таким образом, разрешение зависимости принимает прямую / объявленную зависимость, которая переопределяет необъявленную / транзитивную зависимость (и чем выше, тем ниже #.#. #).

Комментарии:

1. Да, дело в том, что я удалил jackson2-api из всех зависимостей. mvn dependency:tree | grep jackson2-api — пусто. Но плагин установлен на jenkins, поэтому его классы доступны во всем мире. Думаю, некоторые внутренние компоненты Дженкинса создают классы> все остальное в дереве зависимостей.

2. Из корня BFA pom.xml , вы удалили org.jenkins-ci.plugins:jackson2-api:2.10.2 , но добавили ли вы com.fasterxml.jackson.core:jackson-annotations:2.10.2 и com.fasterxml.jackson.core:jackson-databind:2.10.2 (или 2.9.9), поскольку они являются единственными используемыми зависимостями? Каков результат ? ps: Подход кажется противоречащим Дженкинсу, предоставляющему оболочку Jackson2-API. Похоже, проблема связана с MongoDB, как указано в выпуске JIRA, и должна быть решена там.

3. Обратите внимание, что последняя pom.xml исключает прямые зависимости от com.fasterxml.jackson.core:* on org.mongojack:mongojack , поэтому они будут унаследованы от «ближайшего», который теперь будет корнем BFA pom.xml , через jackson2-api ссылку. При невозможности исключения он будет ссылаться на то, что было в mongojack pom.

4. да, я удалил их: github.com/cvakiitho/build-failure-analyzer-plugin/commit /… не повезло

5. Каков результат? ; то же, что и выше? Ваше последнее изменение по-прежнему включает прямую зависимость от jackson2-api . Не уверен, в какую сторону вы пытаетесь пойти здесь.