cvakiitho
cvakiitho

Reputation: 1396

Jenkins plugin using class from another plugin, not Maven dependency

I’m trying to overcome some dependency disparity through one of plugins, by removing dependency on jackson2-api plugin, and using direct jackson maven dependency instead.

Is it even possible to do something like that? because it seems not to work well.

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

BFA plugin still seems to use jackson classes from jackson2-api plugin, not direct maven dependency. resulting in https://issues.jenkins-ci.org/browse/JENKINS-62214 where wrong jackson version is used in import inside MongoJack, resulting in missing method:

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)

Is dependency from the Jackson2-api plugin somehow higher in classpath in jenkins?

Upvotes: 0

Views: 549

Answers (1)

Ian W
Ian W

Reputation: 4767

Can't answer you directly, but running mvn dependency:analyze and mvn dependency:tree should guide you.

analyze reports:

[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

And dependency:tree reports (selective list):

[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

So, the dependency resolution takes the direct / declared dependency will override the undeclared / transitive dependency (and the higher over the lower #.#.#).

Upvotes: 1

Related Questions