首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >启动HTTP服务器时找不到泽西ResourceConfig

启动HTTP服务器时找不到泽西ResourceConfig
EN

Stack Overflow用户
提问于 2014-04-08 15:22:56
回答 1查看 5.7K关注 0票数 1

我已经编写了一些服务来通过REST来提供latex文档的编译,现在它已经完成了。:/

在开发它的时候,我正在使用TestNG和RestAssured来测试它,它工作起来很有魅力,但现在我正在尝试自己运行它。我不太清楚问题出在哪里,所以我试着粘贴所有必要的东西,并解释一下。

问题是,当我让服务器单独在主方法中运行时,就会发生以下情况。(额外的问题是:我甚至可以以这种方式运行它吗?如果作为war部署到应用程序服务器上,那么它是否也可以通过命令行运行jar,只需使用java -jar x.jar调用它?)

控制台输出

代码语言:javascript
复制
JAVA_HOME=/usr/lib/jvm/java-7-oracle /usr/local/netbeans-7.4/java/maven/bin/mvn "-Dexec.args=-classpath %classpath de.uniluebeck.compilatex.RestServer" -Dexec.executable=java -Dexec.classpathScope=runtime org.codehaus.mojo:exec-maven-plugin:1.2.1:exec
Running NetBeans Compile On Save execution. Phase execution is skipped and output directories of dependency projects (with Compile on Save turned on) will be used instead of their jar artifacts.

--- exec-maven-plugin:1.2.1:exec (default-cli) @ CompiLaTex ---
Exception in thread "main" java.lang.NoClassDefFoundError: org/glassfish/jersey/server/ResourceConfig
        at de.uniluebeck.compilatex.RestServer.<init>(RestServer.java:31)
        at de.uniluebeck.compilatex.RestServer.main(RestServer.java:42)
Caused by: java.lang.ClassNotFoundException: org.glassfish.jersey.server.ResourceConfig
        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        ... 2 more

服务器实例化的类如下所示:

RestServer.java

代码语言:javascript
复制
public class RestServer {

    static final URI BASE_URI = URI.create("http://localhost:8080/");
    final HttpServer httpServer;

    public RestServer() {
        final ResourceConfig resourceConfig = new ResourceConfig(JobService.class, JobFileService.class, LatexEnvironmentService.class, MultiPartFeature.class);
        httpServer = GrizzlyHttpServerFactory.createHttpServer(BASE_URI, resourceConfig);
        System.out.println(String.format("Jersey app started with WADL available at %sapplication.wadl\nTry out %sjobs or %slatex/environments",
                BASE_URI, BASE_URI, BASE_URI));
    }

    public void shutdown() {
        httpServer.shutdownNow();
    }

    public static void main (String[] args){
        RestServer restServer = new RestServer();
        try {
            System.in.read();
        } catch (IOException ex) {
            Logger.getLogger(RestServer.class.getName()).log(Level.SEVERE, null, ex);
        }
        restServer.shutdown();
    }
}

我只是在闲逛,但可能存在一个问题,就是我只使用注释而没有实际的web.xml?

JobService.java

代码语言:javascript
复制
@Path("/jobs")
public class JobService {

    private final RequestHandler requestHandler = new RequestHandler();

    @POST
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
    public Response createJob() {
        return requestHandler.handleCreateJob();
    }

    @GET
    @Path("{jobId}/compile/{latexEnvironment}")
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
    @Produces(MediaType.APPLICATION_JSON)
    public Response compile(@PathParam("jobId") final Long jobId, @PathParam("latexEnvironment") final String latexEnvironment){ //, @Suspended final AsyncResponse asyncResponse) {
        return requestHandler.handleCompile(jobId, latexEnvironment);
    }

这就是pom.xml的样子:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>de.uniluebeck</groupId>
    <artifactId>CompiLaTex</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <name>CompiLaTex</name>

    <properties>
        <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
       <dependency>
            <groupId>com.jayway.restassured</groupId>
            <artifactId>rest-assured</artifactId>
            <version>2.3.0</version>
            <exclusions>
                <!-- Exclude Groovy because of classpath issue -->
                <exclusion>
                    <groupId>org.codehaus.groovy</groupId>
                    <artifactId>groovy</artifactId>
                </exclusion>
            </exclusions>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-all</artifactId>
            <!-- Needs to be the same version that REST Assured depends on -->
            <version>2.2.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.8.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>javax.ws.rs</groupId>
            <artifactId>javax.ws.rs-api</artifactId>
            <version>2.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.media</groupId>
            <artifactId>jersey-media-multipart</artifactId>
            <version>2.6</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-grizzly2-http</artifactId>
            <version>2.6</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.media</groupId>
            <artifactId>jersey-media-moxy</artifactId>
            <version>2.6</version>
        </dependency>
        <dependency>
            <groupId>org.apache.derby</groupId>
            <artifactId>derbyclient</artifactId>
            <version>10.10.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.persistence</groupId>
            <artifactId>eclipselink</artifactId>
            <version>2.5.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.eclipse.persistence</groupId>
            <artifactId>org.eclipse.persistence.jpa.modelgen.processor</artifactId>
            <version>2.5.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-web-api</artifactId>
            <version>7.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-exec</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.gmbal</groupId>
            <artifactId>gmbal</artifactId>
            <version>4.0.0-b001</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.enunciate</groupId>
            <artifactId>enunciate-core</artifactId>
            <version>1.28</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                    <compilerArguments>
                        <endorseddirs>${endorsed.dir}</endorseddirs>
                    </compilerArguments>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <mainClass>de.uniluebeck.compilatex.RestServer</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.3</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.6</version>
                <executions>
                    <execution>
                        <phase>validate</phase>
                        <goals>
                            <goal>copy</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${endorsed.dir}</outputDirectory>
                            <silent>true</silent>
                            <artifactItems>
                                <artifactItem>
                                    <groupId>javax</groupId>
                                    <artifactId>javaee-endorsed-api</artifactId>
                                    <version>7.0</version>
                                    <type>jar</type>
                                </artifactItem>
                            </artifactItems>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    <repositories>
        <repository>
            <url>http://download.eclipse.org/rt/eclipselink/maven.repo/</url>
            <id>eclipselink</id>
            <layout>default</layout>
            <name>Repository for library EclipseLink (JPA 2.1)</name>
        </repository>
    </repositories>
</project>

我很高兴任何人看到这个问题,并对此发扬光大,谢谢各位!(也很欣赏任何指向其他主题的提示或链接-如何正确地部署这些东西。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-18 20:11:05

感谢@andrei-我让我走上了正确的道路,我发现所有泽西依赖项的作用域都是错误的。设置为提供的时,它们必须在测试时存在,但在运行时不存在。我只是删除了所有这些作用域,它就能工作了。天哪!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22941330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档