Java 如何从jar运行jersey服务器(eclipse)

Java 如何从jar运行jersey服务器(eclipse),java,jersey,Java,Jersey,我用jersey开发了一个小型服务器 HttpServer server = HttpServerFactory.create("http://localhost:9998/"); server.start(); 还有一个像这样的小api: @GET @Path("serverconnectiontest") @Produces(MediaType.APPLICATION_JSON) public CommunicationResponseM isDatabaseOnline() {

我用jersey开发了一个小型服务器

HttpServer server = HttpServerFactory.create("http://localhost:9998/");
server.start();
还有一个像这样的小api:

@GET
@Path("serverconnectiontest")
@Produces(MediaType.APPLICATION_JSON)
public CommunicationResponseM isDatabaseOnline()
{
    CommunicationResponseM result = new CommunicationResponseM();


    return result;
}
在eclipse中,如果我用右键单击->运行方式->java应用程序启动服务器,一切都会正常进行,因此如果我在web浏览器中键入路径,我可以看到服务器响应

现在我想为我的服务器制作一个jar,所以我做了: 右键单击->导出->运行jar,我得到jar文件。。但是,如果我使用“java-jar file.jat”运行这个jar,服务器不会响应并给出以下错误:

com.sun.jersey.spi.container.ContainerResponse write
SEVERE: A message body writer for Java class
it.unitn.se.gym.backend.models.CommunicationResponseM, and Java type class 
it.unitn.se.gym.backend.models.CommunicationResponseM, and MIME media type
application/json was not found

Mar 14, 2013 6:59:10 PM com.sun.jersey.spi.container.ContainerResponse write

SEVERE: The registered message body writers compatible with the MIME media type are:
application/json -> 
com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider$App
com.sun.jersey.json.impl.provider.entity.JSONArrayProvider$App
com.sun.jersey.json.impl.provider.entity.JSONObjectProvider$App
com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$App
com.sun.jersey.json.impl.provider.entity.JSONListElementProvider$App

com.sun.jersey.core.impl.provider.entity.FormProvider
com.sun.jersey.core.impl.provider.entity.StringProvider
com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
com.sun.jersey.core.impl.provider.entity.FileProvider
com.sun.jersey.core.impl.provider.entity.InputStreamProvider
com.sun.jersey.core.impl.provider.entity.DataSourceProvider
com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General
com.sun.jersey.core.impl.provider.entity.ReaderProvider
com.sun.jersey.core.impl.provider.entity.DocumentProvider
com.sun.jersey.core.impl.provider.entity.StreamingOutputProvider
com.sun.jersey.core.impl.provider.entity.SourceProvider$SourceWriter
com.sun.jersey.server.impl.template.ViewableMessageBodyWriter
com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider$General
com.sun.jersey.json.impl.provider.entity.JSONArrayProvider$General
com.sun.jersey.json.impl.provider.entity.JSONObjectProvider$General
com.sun.jersey.json.impl.provider.entity.JSONWithPaddingProvider
com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General
com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General
com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$General
com.sun.jersey.json.impl.provider.entity.JSONListElementProvider$General
com.sun.jersey.json.impl.provider.entity.JacksonProviderProxy

Mar 14, 2013 6:59:10 PM com.sun.jersey.spi.container.ContainerResponse logException
SEVERE: Mapped exception to response: 500 (Internal Server Error)
javax.ws.rs.WebApplicationException: com.sun.jersey.api.MessageException: A message body     
writer for Java class it.unitn.se.gym.backend.models.CommunicationResponseM, and Java type   
class it.unitn.se.gym.backend.models.CommunicationResponseM, and MIME media type   
application/json was not found
at com.sun.jersey.spi.container.ContainerResponse.write(ContainerResponse.java:285)
at    

   com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1479)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1391)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1381)
at com.sun.jersey.server.impl.container.httpserver.HttpHandlerContainer.handle(HttpHandlerContainer.java:191)
at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:65)
at sun.net.httpserver.AuthFilter.doFilter(AuthFilter.java:65)
at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:68)
at sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(ServerImpl.java:557)
at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:65)
at sun.net.httpserver.ServerImpl$Exchange.run(ServerImpl.java:529)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
at java.lang.Thread.run(Thread.java:680)
 Caused by: com.sun.jersey.api.MessageException: A message body writer for Java class    
it.unitn.se.gym.backend.models.CommunicationResponseM, and Java type class     
it.unitn.se.gym.backend.models.CommunicationResponseM, and MIME media type   
application/json was not found
你能帮我吗

太多了


如果我尝试

您是否配置了指向要运行的主类的MANIFEST.MF文件?更多信息

不,因为我使用的是一个普通的java项目,没有MANIFEST:MF文件如果你想要一个可执行的jar,你需要一个MANIFEST.MF文件。所以你要么让Eclipse为你生成一个,要么手工创建一个。我解包了.jar文件,注意到有一个.mf文件,它包含“Rsrc Main Class:it.unitn.se.gym.backend.WebService”,WebService是服务器启动的类……还有“Main Class:org.Eclipse.jdt.internal.jarinjarloader.jarsrcloader”,在代码中添加一些日志语句,以便跟踪启动和执行期间发生的情况。使用更多信息跟踪错误会更容易。我使用控制台在尝试联系服务器时给我的错误更新了open post