gpt4 book ai didi

同一应用程序中的javax.json和jakarta.json : org. glassfish.json.JsonProviderImpl cannot be cast to jakarta.json.spi.JsonProvider

转载 作者:行者123 更新时间:2023-12-05 04:40:22 27 4
gpt4 key购买 nike

我正在开发一个面向 Java EE 8 应用程序服务器 (JBoss/Wildfly) 的应用程序。

但是,其中一个依赖项 (elasticsearch api) 已经在使用 jakarta.json.* 类,这会在运行时导致 ClassCastException:

java.lang.ClassCastException: org.glassfish.json.JsonProviderImplcannot be cast to jakarta.json.spi.JsonProvider

那是因为我的类路径 (org.classfish:javax.json:1.1.4) 中的 org.classfish.json.JsonProviderImpl 仍在使用 javax.json类。

但是,因为 org.glassfish:jakarta.jsonorg.classfish:javax.json 定义了相同的类 org.classfish.json.JsonProviderImpl (一个使用 javax.json.* 类,一个使用 jakarta.json.* 类...),我无法简单地包括两者Maven 工件。

JsonProviderImpl 的实现(在两个工件中!)默认情况下基本上返回以下内容:

return Class.forName("org.glassfish.json.JsonProviderImpl");

org.glassfish:jakarta.jsonorg.classfish:javax.json 都在类路径中时,这将导致任何实现出现问题从另一个包中获取 JsonProviderImpl

我该怎么做才能解决这个问题?

最佳答案

一种解决方法似乎是使用 Maven 阴影插件基本上“重命名”包 org.glassfish.json在"new"org.glassfish:jakarta.jsonjakarta.org.glassfish.json :

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
<configuration>
<filters>
<filter>
<artifact>org.glassfish:jakarta.json</artifact>
<includes>
<include>org/glassfish/json/**</include>
</includes>
</filter>
</filters>
<artifactSet>
<includes>
<include>org.glassfish:jakarta.json</include>
</includes>
</artifactSet>
<relocations>
<relocation>
<pattern>org.glassfish.json</pattern>
<shadedPattern>jakarta.org.glassfish.json</shadedPattern>
</relocation>
</relocations>
</configuration>
</plugin>
</plugins>
</build>

然后,可以创建文件 src/main/resources/META-INF/services/jakarta.json.spi.JsonProvider内容如下:

jakarta.org.glassfish.json.JsonProviderImpl

这将说明 jakarta.json.spi.JsonProvider 的实现使用 JsonProviderImpl 的阴影版本(来自 org.glassfish:jakarta.json 工件 - 使用 jakarta.json.* 类)而不是 JsonProviderImpl (与 org.glassfish:javax.json 中的同名)。

关于同一应用程序中的javax.json和jakarta.json : org. glassfish.json.JsonProviderImpl cannot be cast to jakarta.json.spi.JsonProvider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70302594/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com