Java 我的jar中缺少标准消息正文读取器提供程序
我必须错过一些东西两天了 我有一个简单的jar应用程序,它使用jersey客户端jar。 当我从Eclipse或mvn exec运行我的主类时,一切都很顺利 当我构建jar并使用java-jar运行它时,我得到: com.sun.jersey.api.client.clienthandler异常:未找到Java类Java.lang.String、Java类型类Java.lang.String和MIME媒体类型application/json的消息体读取器 i、 e.我客户的提供者列表中缺少所有标准Java类型的正文阅读器提供者 我在客户端的pom.xml依赖项中声明:Java 我的jar中缺少标准消息正文读取器提供程序,java,jersey,client,Java,Jersey,Client,我必须错过一些东西两天了 我有一个简单的jar应用程序,它使用jersey客户端jar。 当我从Eclipse或mvn exec运行我的主类时,一切都很顺利 当我构建jar并使用java-jar运行它时,我得到: com.sun.jersey.api.client.clienthandler异常:未找到Java类Java.lang.String、Java类型类Java.lang.String和MIME媒体类型application/json的消息体读取器 i、 e.我客户的提供者列表中缺少所有标
- 泽西岛客户
- 球衣核心
- 泽西json
- 泽西服务器
- 杰克逊地图绘制者
- jackson core asl
- 泽西多部分
config.getClasses().add(StringProvider.class);
但是这个提供程序取消限制必须只对自定义bean是必需的?默认情况下是否可以访问标准bean提供程序?不是吗?您是否将所有类捆绑在一个jar中(包括来自jersey模块的类)?如果是这样的话,那么这看起来像是您丢失了一些META-INF文件,或者您将其合并到一个模块中,一个同名的文件从另一个模块中重写了一个同名的文件。我在发布后差不多一年才发现这一点,但事实证明,我的问题是使用shade将所有内容合并到一个jar中。再加上几个变压器似乎已经解决了问题。我的shade插件conf现在看起来是这样的:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.0</version>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.sandwormz.jettycore.NotezWebsocketMain</mainClass>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.handlers</resource>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.schemas</resource>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/services/javax.ws.rs.ext.MessageBodyReader</resource>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/services/javax.ws.rs.ext.MessageBodyWriter</resource>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.sandwormz.jettycore.NotezWebsocketMain</mainClass>
</transformer>
</transformers>
<filters>
<filter>
This is required if we want anything build on top of this
to
compile without security errors.
<artifact>*</artifact>
<excludes>
<exclude>**/*.MF</exclude>
<exclude>**/*.SF</exclude>
<exclude>**/*.DSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
org.apache.maven.plugins
maven阴影插件
2
假的
包裹
阴凉处
com.sandwormz.jettycore.NotezWebsocketMain
META-INF/spring.handlers
META-INF/spring.schemas
META-INF/services/javax.ws.rs.ext.MessageBodyReader
META-INF/services/javax.ws.rs.ext.MessageBodyWriter
com.sandwormz.jettycore.NotezWebsocketMain
如果我们想在此基础上构建任何东西,这是必需的
到
编译时没有安全错误。
*
**/*.MF
**/*.SF
**/*.DSA
希望这对某人有所帮助。谢谢你的回复,马丁。我首先将我的客户机和所有jersey deps打包在client.jar中。我已经使用maven shade来确保正确构建META-INF。然后,我将最后一个应用程序打包为对客户端jar的依赖。无论如何,我将检查我的所有META-INF文件StringProvider是否在META-INF/services/javax.ws.rs.ext.MessageBodyReader的jersey核心模块中注册。看看它是否存在于client.jar文件中。。。事实上,当我构建这个jar时,client.jar的META-INF代表是空的,“没有依赖项”,就像一个库。但是在使用客户端的my app.jar中,META-INF包含所有提供者类(来自jersey json和jersey core)。你认为问题在于提供者没有在client.jar本身中注册吗!!我浪费了整整一天才看到这个。你是救世主!!谢谢