我有一个war文件要部署在jboss/wildfly上。war在它的WEB-INF/lib目录中包含了一些jar文件。其中一些jar文件包含了相同类的冲突(或者至少是不同的)版本。
例如,有一个来自我们遗留代码中两个源的伪代码的jar,它是在maven中定义的,所以它可能在一个或另一个类中使用,我不能删除任何一个。
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-okhttp</artifactId>
<version>10.1.0</version>
</dependency>
这会带来伪核的伪依赖性:10.2.3
<dependency>
<!-- Required to use PATCH -->
<groupId>com.netflix.feign</groupId>
<artifactId>feign-httpclient</artifactId>
<version>8.18.0</version>
</dependency>
这会带来伪核的伪依赖性:8.18.0
两者都有一个响应类,但其中一个没有代码所需的特定create方法。
问题是当jboss/wildfly部署这个war文件时,它会将所有依赖项都放在WEB-INF/lib文件夹中,并且两个jar文件都在那里,那么jar文件在这里的顺序/优先级是什么?如果类加载器选择第一个jar文件,它会抛出一个错误,否则它会正常工作。
在第一种情况下,它会掷回这个错误:
java.lang.无此类方法错误:创建一个新的响应。Java/实用程序/Map; Lfeign/响应$正文;)Lfeign/响应;
我们怎样才能避免这种情况?
1条答案
按热度按时间vxqlmq5t1#
Maven不会将
feign-core
的两个版本都打包到WAR中,除非groupId发生了更改。Maven将始终只为给定的groupId和artifactId选择一个版本。一般来说,你应该尝试让它与较新的版本。如果这是不可能的,你可以考虑使用Maven阴影插件的阴影。