【问题标题】:Runtime error in Codenvy Java executionCodenvy Java 执行中的运行时错误
【发布时间】:2015-06-03 11:19:05
【问题描述】:

我是 Codenvy 的新手,我正在使用基于 this code 的 Jersey 开发 RESTful 服务。当我构建并运行代码时,控制台返回此错误。

[STDERR] 线程“main”中的异常 java.lang.NoClassDefFoundError: com/sun/jersey/api/container/grizzly/GrizzlyWebContainerFactory

[STDERR] at com.apiconnect.Main.main(Main.java:22)

[STDERR] 引起:java.lang.ClassNotFoundException: com.sun.jersey.api.container.grizzly.GrizzlyWebContainerFactory

[STDERR] at java.net.URLClassLoader$1.run(URLClassLoader.java:366)

[STDERR] at java.net.URLClassLoader$1.run(URLClassLoader.java:355)

[STDERR] at java.security.AccessController.doPrivileged(Native Method)

[STDERR] at java.net.URLClassLoader.findClass(URLClassLoader.java:354)

[STDERR] at java.lang.ClassLoader.loadClass(ClassLoader.java:425)

[STDERR] 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)

[STDERR] at java.lang.ClassLoader.loadClass(ClassLoader.java:358)

[STDERR] ... 还有 1 个

第 22 行是:

SelectorThread threadSelector = GrizzlyWebContainerFactory.create(baseUri, initParams);

编辑:pom.xml 是:

<?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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.apiconnect</groupId>
<version>1.0-SNAPSHOT</version>
<artifactId>apiconnect-example</artifactId> 
<repositories>
    <repository>
        <id>maven2-repository.java.net</id>
        <name>Java.net Repository for Maven</name>
        <url>http://download.java.net/maven/2/</url>
        <layout>default</layout>
    </repository>
</repositories>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-grizzly</artifactId>
        <version>1.9-ea01</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey.contribs</groupId>
        <artifactId>jersey-multipart</artifactId>
        <version>1.9-ea01</version>
    </dependency>
    <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-server</artifactId>
            <version>1.9-ea01</version>
      </dependency>
    <dependency>
        <groupId>com.sun.grizzly</groupId>
        <artifactId>grizzly-servlet-webserver</artifactId>
        <version>1.9.18-i</version>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
           <artifactId>maven-jar-plugin</artifactId>
                <groupId>org.apache.maven.plugins</groupId>
           <version>2.3.2</version>
                <configuration>
                <archive>
                        <manifest>
                        <addClasspath>true</addClasspath>
                        <mainClass>com.apiconnect.Main</mainClass>
                        </manifest>
                </archive>
                </configuration>
            </plugin>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <groupId>org.apache.maven.plugins</groupId>
            <version>2.3.2</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>appassembler-maven-plugin</artifactId>
            <version>1.1.1</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>assemble</goal>
                    </goals>
                    <configuration>
                        <assembleDirectory>target</assembleDirectory>
                        <programs>
                            <program>
                                <mainClass>com.apiconnect.Main</mainClass>
                                <name>app</name>
                            </program>
                        </programs>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build></project>

我还在 Netbeans 中尝试了我的代码并且工作正常。有什么问题,我该如何解决?

【问题讨论】:

    标签: java maven jersey


    【解决方案1】:

    在 Codenvy 中,构建和运行过程发生在不同的节点和不同的环境中。这个项目产生 /repo 有相当多的 jars 和一个启动脚本,无法注入到 Docker 容器中(Codenvy 运行器是基于 Docker 的)。因此,我建议在同一环境(即运行时)中执行构建和运行。您需要做的是创建一个新的运行器(按钮在运行器面板上),在那里安装 Maven,执行构建并执行启动脚本。您还必须从 localhost 取消绑定服务(请参见下面的屏幕截图)。您的机器配方如下:

    FROM codenvy/jdk7
    # install Maven
    RUN mkdir -p /home/user/maven3 && \
    wget -qO- "http://archive.apache.org/dist/maven/maven-3/3.1.1/binaries/apache-maven-3.1.1-bin.tar.gz" | tar -zx --strip-components=1 -C /home/user/maven3
    ENV M2_HOME /home/user/maven3
    RUN echo "export M2_HOME=$M2_HOME" >> /home/user/.bashrc
    ENV PATH $M2_HOME/bin:$PATH
    RUN echo "export PATH=$PATH" >> /home/user/.bashrc
    #expose port
    EXPOSE 9998
    #map it to an external port
    ENV CODENVY_APP_PORT_9998_HTTP 9998
    # add project sources
    ADD jax-rs-sample-1.0-SNAPSHOT-jar-with-dependencies_sources_unpack /home/user/app/
    # change permissions for project folder
    RUN sudo chown -R user:user /home/user/app
    # build and run
    CMD cd /home/user/app && \
        mvn package -q && \
        sudo chmod a+x /home/user/app/target/bin/app && \
        /home/user/app/target/bin/app 2>&1
    

    这将触发构建并运行服务。查看运行器面板底部的 URL 和端口。我们将 Docker 中的公开端口映射到运行器实例上的外部端口。每次点击 Run 时都会随机选择主机和端口。

    【讨论】:

      【解决方案2】:

      您的代码在类路径中找不到 com/sun/jersey/api/container/grizzly/GrizzlyWebContainerFactory 类。尝试添加以下依赖项:

         <dependency>
              <groupId>com.sun.jersey</groupId>
              <artifactId>jersey-grizzly</artifactId>
              <version>1.9.1</version>
          </dependency>
          <dependency>
              <groupId>com.sun.jersey.contribs</groupId>
              <artifactId>jersey-multipart</artifactId>
              <version>1.9.1</version>
          </dependency>
          <dependency>
              <groupId>com.sun.grizzly</groupId>
              <artifactId>grizzly-servlet-webserver</artifactId>
              <version>1.9.18-i</version>
          </dependency>
      

      【讨论】:

      • 完成了,但还是有同样的问题。
      • 问题仍然存在。 Codenvy 端口是否可能出于安全原因而关闭?
      • 不,堆栈跟踪清楚地显示,未找到 GrizzlyWebContainerFactory 类,你能显示你的 pom.xml 吗?
      • 使用 pom.xml 编辑主题。
      • 从 pom 中删除所有依赖项并按照帖子中的说明添加(更新)。
      猜你喜欢
      • 2011-12-19
      • 1970-01-01
      • 2020-01-14
      • 1970-01-01
      • 2012-06-28
      • 2012-04-28
      • 2014-02-06
      • 1970-01-01
      相关资源
      最近更新 更多