Как я могу заставить развертывание JBoss использовать определенную версию зависимости вместо установленных модулей? - PullRequest
0 голосов
/ 07 июня 2018

При развертывании * .ear в JBoss, он всегда использует неправильную версию com.fasterxml.jackson.core.

Мой код использует функции com.fasterxml.jackson.core версии 2.9.0 и прекрасно компилируется,но при вызове кода в JBoss я получил java.lang.NoSuchFieldError.

Мне кажется, что загрузчик классов JBoss использует уже установленный модуль Джексона версии 2.5.0.

Как я могу иметь JBossclassloader для использования версии 2.9.0 для моего развертывания?

Ситуация

Я разрабатываю плагин для Keycloak , который я тестирую локально, развертываяэто через Keycloak Docker Image Версия 3.2.1.

Ухо развернуто путем копирования его в $ JBOSS_HOME / standalone / deployments перед запуском образа, и плагин работает нормально, пока я не используюфункции от Джексона 2.9.

Что я пробовал до сих пор:

Я закрепил версию через pom.xml:

<dependencyManagement>
    <dependencies>
        <dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.0</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.9.0</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.9.0</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

Я исключилДжексон-модули в моем jboss-deploy-structure.xml:

<deployment>
    <dependencies>
        <module name="org.keycloak.keycloak-core" export="true" />
        <module name="org.keycloak.keycloak-server-spi" export="true" />
        <module name="org.keycloak.keycloak-server-spi-private" export="true" />
        <module name="org.keycloak.keycloak-services" export="true" />
        <module name="org.bouncycastle" export="true" />
        <module name="com.google.guava" export="true" />
        <module name="org.jboss.logging" export="true" />
    </dependencies>
    <exclusions>
        <module name="com.fasterxml.jackson.core.jackson-core" />
        <module name="com.fasterxml.jackson.core.jackson-databind" />
        <module name="com.fasterxml.jackson.core.jackson-annotations" />
    </exclusions>
</deployment>

Я проверил дерево зависимостей:

mvn dependency:tree | grep jackson
[INFO] |  +- com.fasterxml.jackson.core:jackson-core:jar:2.9.0:compile
[INFO] |  \- com.fasterxml.jackson.core:jackson-databind:jar:2.9.0:compile
[INFO] |  +- com.fasterxml.jackson.core:jackson-annotations:jar:2.9.0:compile
[INFO]    \- com.github.kittinunf.fuel:fuel-jackson:jar:1.12.0:runtime
[INFO]       +- com.fasterxml.jackson.module:jackson-module-kotlin:jar:2.9.0:runtime
[INFO]    |  +- com.fasterxml.jackson.core:jackson-core:jar:2.9.0:compile
[INFO]    |  \- com.fasterxml.jackson.core:jackson-databind:jar:2.9.0:compile
[INFO]    |     \- com.fasterxml.jackson.core:jackson-annotations:jar:2.9.0:compile
[INFO]       \- com.github.kittinunf.fuel:fuel-jackson:jar:1.12.0:runtime
[INFO]          +- com.fasterxml.jackson.module:jackson-module-kotlin:jar:2.9.0:runtime

Библиотека Джексона 2.5 предустановлена, так как от нее зависит Keycloak:

find ${JBOSS_HOME}/modules | grep jackson-core
/opt/jboss/keycloak/modules/system/layers/base/com/fasterxml/jackson/core/jackson-core
/opt/jboss/keycloak/modules/system/layers/base/com/fasterxml/jackson/core/jackson-core/main
/opt/jboss/keycloak/modules/system/layers/base/com/fasterxml/jackson/core/jackson-core/main/module.xml
/opt/jboss/keycloak/modules/system/layers/base/com/fasterxml/jackson/core/jackson-core/main/jackson-core-2.5.4.jar

Когда я распаковываю свой пакет * .ear, я нахожуДжексон-Джарс с правильной версией в libs/ (META-INF/MANIFEST.MF говорит Bundle-Version: 2.9.0:

ls  lib  | grep jackson
jackson-annotations.jar
jackson-core.jar
jackson-databind.jar

Может кто-нибудь объяснить мне, если и как я могу заставить JBoss использовать правильную версию Джексона?

Спасибо!

1 Ответ

0 голосов
/ 20 июня 2018

Попробуйте добавить следующие модули к <exclusions>.

<module name="org.jboss.resteasy.resteasy-jackson2-provider" />
<module name="com.fasterxml.jackson.module.jackson-module-jaxb-annotations" />
<module name="com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider" />
<module name="com.fasterxml.jackson.jaxrs.jackson-jaxrs-base" />
...