簡體   English   中英

如何強制JBoss部署使用特定版本的依賴性而不是已安裝的模塊?

[英]How can I force a JBoss deployment to use a specific version of a dependency instead of installed modules?

將* .ear部署到JBoss時,它始終使用com.fasterxml.jackson.core的錯誤版本。

我的代碼使用com.fasterxml.jackson.core版本2.9.0的功能,並且可以正常編譯,但是在JBoss中調用代碼時,出現了java.lang.NoSuchFieldError

在我看來,JBoss類加載器使用已安裝的傑克遜模塊版本2.5.0。

如何讓JBoss類加載器將2.9.0版用於部署?

情況

我正在開發Keycloak插件,可以通過Keycloak Docker映像版本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-deployment-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

由於Keycloak依賴於它,因此已預先安裝了jackson 2.5庫:

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/找到具有正確版本的jackson-jars( META-INF/MANIFEST.MF表示Bundle-Version: 2.9.0

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

任何人都可以向我解釋,是否以及如何使JBoss使用正確版本的jackson?

謝謝!

嘗試將以下模塊添加到<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" />

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM