在eclipse中运行没有web.xml的gradle jersey 2.0 web应用程序

时间:2014-05-27 07:14:59

标签: eclipse gradle jetty servlet-3.0 jersey-2.0

我有一个我在eclipse中导入的gradle项目。该项目是一个Web应用程序,我设法构建并部署到tomcat,但是没有加载泽西REST服务,因此在尝试使用这些服务时我得到404.

我正在使用支持servlet-api 3.0的tomcat7。

请注意我没有使用web.xml。我有一个扩展Application的类,应该加载正确的类并为REST服务设置root。 这是我的班级:

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

@javax.ws.rs.ApplicationPath("api")
public class JerseyApplicationConfig extends Application
{
    @Override
    public Set<Class<?>> getClasses()
    {    
        Set<Class<?>> resources = new java.util.HashSet<Class<?>>();
        addRestResourceClasses(resources);
        return resources;
    }

    private void addRestResourceClasses(Set<Class<?>> resources)
    {
        resources.add(com.cisco.gemini.LoggingRESTService.class);
    }    
}

问题是这个类不是由泽西创建的,因此没有设置REST服务。

谢谢, 伽

更新

我设法解决了这个问题所以我在这里发布了解决方案,为每个人带来了好处。 这是我的gradle文件,让事情有效。我现在可以在Eclipse上构建和运行tomcat7上的服务,并且可以正确加载jersey servlet。

注意:我还希望能够从命令行运行服务(用于测试目的),因此我应用了jettyEclipse插件。 gradle附带的jetty插件不支持servlet-api 3.0。这对我来说还不起作用(因为我正在使用slf4j上的一些冲突),但它可能适用于其他人。

谢谢, 伽

apply plugin: 'java' 
apply plugin: 'war' 
apply plugin: 'jetty' 
apply plugin: 'eclipse-wtp'

repositories {
  mavenCentral()
}

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath (group: 'com.sahlbach.gradle', name: 'gradle-jetty-eclipse-plugin', version: '1.9.+')
    }
}
apply plugin: 'jettyEclipse'

dependencies {
  compile 'javax.servlet:javax.servlet-api:3.0.1'
  compile 'com.sun.jersey:jersey-server:1.18.1'
  compile 'com.sun.jersey:jersey-core:1.18.1'
  compile 'com.sun.jersey:jersey-json:1.18.1'
  compile 'com.sun.jersey:jersey-servlet:1.18.1'  
  compile 'javax.ws.rs:jsr311-api:1.1.1'
  compile fileTree(dir: 'libs', include: '*.jar')    
  compile 'org.codehaus.jettison:jettison:1.3.5'
}

eclipse {
   wtp {
     component {
       contextPath = 'MyService'
       deployName = 'MyService'      
        facet {
          facet name: 'jst.web', version: '3.0'
          facet name: 'java', version: '1.7'        }
     }
   }
 }

1 个答案:

答案 0 :(得分:1)

如果你想让它在命令行工作,你可以尝试使用gretty插件 - https://github.com/akhikhl/gretty - 它支持更新版本的Jetty,包括Servlet 3.0兼容版本。或者另一种方法是使您的应用程序2.5兼容:添加web.xml并在此处定义各种组件。我更喜欢第一种解决方案。