【问题标题】:ClassNotFound in Embedded-Jetty and MavenEmbedded-Jetty 和 Maven 中的 ClassNotFound
【发布时间】:2012-09-08 02:00:58
【问题描述】:

为了进行一些表面测试,我为 JUnit 测试启动了一个嵌入式 Jetty。我的测试从服务器调用一些页面。当从 eclipse 做这个测试时一切正常,类路径是由“mvn eclipse:eclipse”创建的。

当使用“mvn test”运行这些测试时,jsp 编译器会引发很多 ClassNotFoundExceptions:javax.servlet.、javax.servlet.jsp 甚至我自己生成的一些类。 servlet 直接回答的所有请求都可以正常工作。

在我的测试用例中做类似 System.out.println(HttpServlet.class) 的工作也很好。所以 Jetty-JSP 编译器在编译时似乎有些“特殊”。

有人知道如何说服 Jetty 编译我的 JSP?

【问题讨论】:

    标签: java jsp maven jetty


    【解决方案1】:

    毕竟问题似乎出在 maven 依赖管理中(或者我允许 maven 做的事情)。

    我的类路径中有很多 javax 工件(jsp-2.1、2.2.3、2.2.1、servlet 2.5、3.0、3.0.glassfish 样式)。因此,在我清理了依赖项之后,一切正常。现在我明白了为什么来自 maven-.build 的码头没有启动。最后我不明白为什么码头出现在日食;)

    【讨论】:

      【解决方案2】:

      如果您查看pom of one jetty module,您会看到:

      <dependency>
          <groupId>org.eclipse.jetty.orbit</groupId>
          <artifactId>javax.servlet</artifactId>
          <scope>provided</scope>
      </dependency>
      

      它依赖于自己的 servlet-api 类。

      因此,如果您在项目 pom 中指定对真实 servlet-api 的依赖项,它可能会起作用:

      <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>javax.servlet-api</artifactId>
          <version>3.0.1</version>
      </dependency>
      

      【讨论】:

      • 我们依赖的servlet类和原来的spec一样,只是因为eclipse的原因重新打包了,签名打包了,manifest已经为OSGI使用清理了,所以这是红鲱鱼
      【解决方案3】:

      【讨论】:

      • 感谢您的回复。如果可能的话,我想从我的测试用例中将 jetty 作为嵌入式服务器启动,这样开发人员就可以在 eclipse 中右键单击来开始他们的测试
      • 是的,当然,我们一直在 jetty 本身这样做,在 jetty 嵌入式码头使用的测试用例中有很多例子,还有这个教程:wiki.eclipse.org/Jetty/Tutorial/Embedding_Jetty
      猜你喜欢
      • 2012-09-26
      • 2012-07-17
      • 2013-07-14
      • 1970-01-01
      • 1970-01-01
      • 2017-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多