我现在必须错过两天......
我有一个简单的jar应用程序,它使用泽西客户端jar。 当我从Eclipse或mvn exec运行我的主类时,一切都很顺利。
当我构建我的jar然后用java -jar运行它时,我得到:
com.sun.jersey.api.client.ClientHandlerException:找不到Java类java.lang.String和Java类型类java.lang.String的消息体读取器,并且找不到MIME媒体类型application / json
即。我客户的提供者列表中缺少所有标准Java类型的体读者提供者。
我在客户端的pom.xml依赖项中声明:
使我的应用程序正常工作的唯一方法是在我的客户端配置中声明StringProvider类...
config.getClasses().add(StringProvider.class);
但是这个提供程序的解除只能是自定义bean所必需的吗?标准bean提供程序默认是可访问的?不是吗?
答案 0 :(得分:7)
我发现它差不多一年发布了,但事实证明我的问题是由于使用阴影将所有东西合并到一个罐子里。添加几个变压器似乎已经解决了问题。我的阴影插件现在看起来像这样:
<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>
希望这有助于某人。
答案 1 :(得分:0)
您是否将所有类捆绑在一个jar中(包括来自jersey模块的类)?如果是这样,那么这看起来就像你缺少一些META-INF文件,或者你以一种方式合并它,即一个模块中的一个同名文件覆盖了来自其他模块的同名文件。