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