使用Grizzly运行Jersey作为可执行jar文件无效

时间:2011-04-28 17:27:30

标签: jersey grizzly

我开发基于Jersey的应用程序并使用Grizzly来测试应用程序。只要我从Eclipse运行它一切都很好!但是,当我导出到可运行的Jar并在Windows 7命令提示符下执行时,我一直收到以下错误消息:列出了我的主要方法,我错过了什么。 (感谢您的帮助)

private static final String PORT="8899";
private static final String MACHINE="http://localhost";
private static final String MAIN_PACKAGE="aklero.idea.persistence";
private static final String JERSEY_PACKAGE="com.sun.jersey.config.property.packages";
private static final String MACHINE_URI=MACHINE+":"+PORT+"/";

public static void main(String[] args) throws IOException
{
    final String baseUri = MACHINE_URI;
    final Map<String, String> initParams = new HashMap<String, String>();      
    initParams.put(JERSEY_PACKAGE, MAIN_PACKAGE);
    System.out.println("Starting grizzly...");
    SelectorThread threadSelector = GrizzlyWebContainerFactory.create(baseUri, initParams);
    System.in.read();
    threadSelector.stopEndpoint();
    System.exit(0);         
}

我得到的错误:

SEVERE:ResourceConfig实例不包含任何根资源类。

2011年4月28日下午12:42:56 com.sun.grizzly.http.servlet.ServletAdapter doService

严重:服务异常:

com.sun.jersey.api.container.ContainerException:ResourceConfig实例不

包含任何根资源类。

at com.sun.jersey.server.impl.application.RootResourceUriRules。

(RootResourceUriRules.java:103)

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

我遇到了同样的问题。 解决方案是手动添加资源文件。

更改您的2个变量:

private static final String MAIN_PACKAGE = "yourpackage2.MyApplication";
private static final String JERSEY_PACKAGE = "javax.ws.rs.Application";

并创建此文件:

package yourpackage2;

import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.core.Application;

public class MyApplication extends Application {
    public Set<Class<?>> getClasses() {
        Set<Class<?>> s = new HashSet<Class<?>>();
        s.add(yourpackage1.ResourceClass1.class);
        //s.add(...); and so on
        return s;
    }
}

在eclipse中创建jar时,激活单选按钮“将所需库打包为生成的JAR”

如果您使用其他jar,请在启动程序时将它们包含在类路径中。只需: java -cp ./DIR1;./DIR2;./DIR3 -jar myJAR.jar