我想将以下Maven依赖项放入我的项目中。
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-joda</artifactId>
<version>2.9.9</version>
</dependency>
此依赖项取决于以下内容:
com.fasterxml.jackson.core:jackson-annotations:2.9.0
com.fasterxml.jackson.core:jackson-core:2.9.9
com.fasterxml.jackson.core:jackson-databind:2.9.9
javax.servlet:javax.servlet-api:3.1.0
joda-time:joda-time:2.7
然后我想将应用程序部署到WildFly 8.2.1服务器。服务器未提供我的特定依赖关系,但其传递依赖关系是(在modules/system/layers/base
下)。
com/fasterxml/jackson/core/jackson-annotations/main/jackson-annotations-2.4.1.jar
com/fasterxml/jackson/core/jackson-core/main/jackson-core-2.4.1.jar
com/fasterxml/jackson/core/jackson-databind/main/jackson-databind-2.4.1.jar
javax/servlet/api/main/jboss-servlet-api_3.1_spec-1.0.0.Final
org/joda/time/main/joda-time-1.6.2.jar
运行该应用程序时,由于databind
依赖性而导致错误。我的datatype
依赖项引用了databind
中没有出现在版本2.4.1
中的字段。因此,我需要将databind
的依赖关系提高到2.9.9
。
想法1:手动添加依赖项
我尝试按如下所示手动将更新后的依赖项包含在pom中(希望它会覆盖WildFly版本)。
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.9</version>
</dependency>
结果:发生相同的错误。
想法2:使用jboss-deployment-structure.xml排除WildFly版本
我添加了一个具有以下内容的src/main/webapp/WEB-INF/jboss-deployment-structure.xml
文件。
<jboss-deployment-structure>
<deployment>
<exclusions>
<module name="com.fasterxml.jackson.core.jackson-databind" />
</exclusions>
</deployment>
</jboss-deployment-structure>
结果:发生相同的错误。
想法3:更改WildFly模块
我将jackson-databind-2.9.9.jar
直接添加到WildFly模块中,并更新相应的module.xml
以使用新的JAR。
结果:有效。但是,我不想这样做,因为我希望其他开发人员能够使用全新的WildFly安装而不必进行任何更改。
想法4:恢复为以前的版本
我将原始依赖关系恢复为与2.4.1
的WildFly版本一致,如下所示。
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-joda</artifactId>
<version>2.4.1</version>
</dependency>
结果:有效。但是,一堆预先存在的代码依赖于2.9.9的版本,因此我不想在版本控制中倒退。
为什么WildFly忽略了我尝试覆盖其模块的尝试?是否可以强制使用databind
版本2.9.9
。预先感谢您的帮助。