Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将Jersey deps应用程序打包到JAR中时出现问题_Java_Jar_Jersey_Jackson - Fatal编程技术网

Java 将Jersey deps应用程序打包到JAR中时出现问题

Java 将Jersey deps应用程序打包到JAR中时出现问题,java,jar,jersey,jackson,Java,Jar,Jersey,Jackson,我的团队发布了几乎所有功能的可执行JAR(不是applet,只是为了澄清)。我们的一个新可执行文件是依赖于Jersey的Web服务客户端。我正试图使用自动POJO映射工具来解组响应(即,我在ClientConfig中将JSONConfiguration.FEATURE\u POJO\u映射设置为true),但当我执行jar时,我会收到“我不知道如何解组此响应”消息: SEVERE:找不到Java类edu.mit.broad.picard.bass.GetSite、Java类型类edu.mit.b

我的团队发布了几乎所有功能的可执行JAR(不是applet,只是为了澄清)。我们的一个新可执行文件是依赖于Jersey的Web服务客户端。我正试图使用自动POJO映射工具来解组响应(即,我在ClientConfig中将JSONConfiguration.FEATURE\u POJO\u映射设置为true),但当我执行jar时,我会收到“我不知道如何解组此响应”消息:

SEVERE:找不到Java类edu.mit.broad.picard.bass.GetSite、Java类型类edu.mit.broad.picard.bass.GetSite和MIME媒体类型application/json的消息正文读取器

如果我从IDE(IntelliJ)运行该应用程序,它就可以正常工作。我假设jar文件的打包方式有问题,但我对Jersey(或Jackson)的详细信息还不太了解,无法修复这个问题。有什么提示吗

这是Java1.7、Jersey bundle 1.17.1和Jackson 1.9.13。所有
com/sun/***
org/codehaus/***
文件都包含在jar中

谢谢你的帮助

编辑: 我检查了META-INF目录中所需的…/services目录。下面是其中的内容:

cm59f-0fa:zamboni jrose$ jar tvf GenerateGetSite.jar | grep META-INF | grep services
    0 Thu Aug 15 10:43:32 EDT 2013 META-INF/services/
    0 Thu Feb 28 15:29:04 EST 2013 META-INF/services/com.sun.jersey.server.impl.model.method.dispatch.ResourceMethodDispatchProvider
  514 Thu Feb 28 15:29:04 EST 2013 META-INF/services/com.sun.jersey.spi.HeaderDelegateProvider
  563 Thu Feb 28 15:29:04 EST 2013 META-INF/services/com.sun.jersey.spi.StringReaderProvider
  147 Thu Feb 28 15:29:04 EST 2013 META-INF/services/com.sun.jersey.spi.container.ContainerProvider
   60 Thu Feb 28 15:29:04 EST 2013 META-INF/services/com.sun.jersey.spi.container.ContainerRequestFilter
    0 Thu Feb 28 15:29:04 EST 2013 META-INF/services/com.sun.jersey.spi.container.ContainerResponseFilter
  377 Wed Feb 27 20:17:28 EST 2013 META-INF/services/com.sun.jersey.spi.container.ResourceMethodCustomInvokerDispatchProvider
  376 Wed Feb 27 20:17:28 EST 2013 META-INF/services/com.sun.jersey.spi.container.ResourceMethodDispatchProvider
   64 Thu Feb 28 15:29:04 EST 2013 META-INF/services/com.sun.jersey.spi.container.WebApplicationProvider
  267 Thu Feb 28 15:29:04 EST 2013 META-INF/services/com.sun.jersey.spi.inject.InjectableProvider
   44 Wed Feb 27 20:17:06 EST 2013 META-INF/services/javax.enterprise.inject.spi.Extension
  882 Mon Dec 19 14:53:22 EST 2011 META-INF/services/javax.script.ScriptEngineFactory
   79 Wed Feb 27 20:17:06 EST 2013 META-INF/services/javax.servlet.ServletContainerInitializer
 2880 Thu Feb 28 15:29:04 EST 2013 META-INF/services/javax.ws.rs.ext.MessageBodyReader
 2654 Thu Feb 28 15:29:04 EST 2013 META-INF/services/javax.ws.rs.ext.MessageBodyWriter
   56 Thu Feb 28 15:29:04 EST 2013 META-INF/services/javax.ws.rs.ext.RuntimeDelegate`

我猜想您正在创建一个包含所有jar依赖项内容的jar。如果是这种情况,那么问题可能是由于您的one-jar构造不当造成的。泽西岛依靠META-INF/services中的资源正常运行。您需要确保META-INF/服务的内容被合并到您的一个jar中

一个对我有效的选项是maven shade插件,它包括一个变压器,可以实现这种合并:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <configuration>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
                </transformers>
            </configuration>
        </plugin>

org.apache.maven.plugins
maven阴影插件

我猜您正在创建一个包含所有jar依赖项内容的jar。如果是这种情况,那么问题可能是由于您的one-jar构造不当造成的。泽西岛依靠META-INF/services中的资源正常运行。您需要确保META-INF/服务的内容被合并到您的一个jar中

一个对我有效的选项是maven shade插件,它包括一个变压器,可以实现这种合并:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <configuration>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
                </transformers>
            </configuration>
        </plugin>

org.apache.maven.plugins
maven阴影插件

Hm,刚刚检查了META-INF,它有服务目录,包括提供者类。我将把列表添加到原始帖子中。您需要确保在各种jar中列出的所有提供程序类都在重新打包的jar中列出。就这样!我包括了所有com.sun和org.codehaus类,但没有javax.Hm,只是检查了META-INF,它有services dir,包括provider类。我将把列表添加到原始帖子中。您需要确保在各种jar中列出的所有提供程序类都在重新打包的jar中列出。就这样!我包括了所有com.sun和org.codehaus类,但没有包括javax类。