2010-06-24 48 views
2

我有一个在Java 6上使用JSP 2.1,Servlets 2.5和JSTL 1.2的webapp。我使用maven-jetty-plugin 6.1.1rc1进行测试,没有任何问题。从这个链接:http://docs.codehaus.org/display/JETTY/JSP+2.0+v+JSP+2.1,据我所知,如果在JDK 5+上,jetty 6将选择JSP 2.1,该工作正常。如何使用JSP 2.1与Cargo maven插件和Jetty6x嵌入?

这里是我的应用战争的pom.xml的相关部分:

<!--servlet & javax--> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>jstl</artifactId> 
      <version>1.2</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>servlet-api</artifactId> 
      <version>2.5</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet.jsp</groupId> 
      <artifactId>jsp-api</artifactId> 
      <version>2.1</version> 
      <scope>provided</scope> 
    </dependency> 

现在我想建立使用货jetty6x嵌入式自动化集成测试。容器启动正常,没有错误。但是,我无法呈现任何JSP。这是我得到的异常,据我所知,是因为使用了JSP-2.0 impl而不是JSP-2.1。

(TagLibraryInfoImpl.java:547) - Unknown element (deferred-value) in attribute 

Caused by: java.lang.NoSuchMethodError: javax.servlet.jsp.PageContext.getELContext()Ljavax/el/ELContext; at org.apache.taglibs.standard.tag.common.core.SetSupport.doEndTag(SetSupport.java:140)

这是我的货物配置:

<plugin> 
<groupId>org.codehaus.cargo</groupId> 
<artifactId>cargo-maven2-plugin</artifactId> 
<version>1.0.1</version> 
<configuration> 
    <container> 
     <containerId>jetty6x</containerId> 
     <type>embedded</type> 
    </container> 
    <configuration> 
     <deployables> 
      <deployable> 
       <groupId>groupId</groupId> 
       <artifactId>artifact</artifactId> 
       <type>war</type> 
      </deployable> 
     </deployables> 
    </configuration> 
    <wait>${cargo.wait}</wait> 
</configuration> 
<executions> 
    <execution> 
     <id>start-container</id> 
     <phase>pre-integration-test</phase> 
     <goals> 
      <goal>start</goal> 
     </goals> 
    </execution> 
    <execution> 
     <id>stop-container</id> 
     <phase>post-integration-test</phase> 
     <goals> 
      <goal>stop</goal> 
     </goals> 
    </execution> 
</executions> 

的货物集装箱jetty6x也使用码头的v6.1.1rc1,所以它必须是事做与货物使用码头的方式一样。我知道货物对其容器依赖关系的版本进行硬编码,而不是使用maven依赖关系机制(可能是出于很好的理由,jira-> CARGO-571)

所以我的问题是:是否有其他人设法使用JSP 2.1货物和码头6x嵌入?任何建议让它工作?

任何帮助非常感谢!

+0

是否有任何特别的原因,您不想使用jetty7x容器?这直接适用于JSP 2.1。 – 2010-11-30 04:10:14

回答

1

好的,设法弄明白这一个。邮寄名单中的这篇文章很有帮助: http://old.nabble.com/Jetty6-version-with-maven-plugin-td16722550.html。它描述了如何使用货物定制容器的类路径,但是如果采取这种方法,则需要手动指定所有依赖关系。

我从货源地发现,这些都是jetty6x容器默认使用的依赖关系:

jetty6xDependencies.add(new Dependency("org.mortbay.jetty", "jsp-api-2.0", "6.1.1rc1")); 
    jetty6xDependencies.add(new Dependency("org.mortbay.jetty", "servlet-api-2.5", "6.1.1rc1")); 
    jetty6xDependencies.add(new Dependency("org.mortbay.jetty", "jetty", "6.1.1rc1")); 
    jetty6xDependencies.add(new Dependency("org.mortbay.jetty", "jetty-util", "6.1.1rc1")); 
    jetty6xDependencies.add(new Dependency("org.mortbay.jetty", "jetty-naming", "6.1.1rc1")); 
    jetty6xDependencies.add(new Dependency("org.mortbay.jetty", "jetty-plus", "6.1.1rc1")); 
    jetty6xDependencies.add(new Dependency("ant", "ant", "1.6.5")); 
    jetty6xDependencies.add(new Dependency("commons-el", "commons-el", "1.0")); 
    jetty6xDependencies.add(new Dependency("tomcat", "jasper-compiler", "5.5.15")); 
    jetty6xDependencies.add(new Dependency("tomcat", "jasper-runtime", "5.5.15")); 
    jetty6xDependencies.add(new Dependency("tomcat", "jasper-compiler-jdt","5.5.15")); 
    jetty6xDependencies.add(new Dependency("javax.mail", "mail", "1.4")); 
    jetty6xDependencies.add(new Dependency("javax.activation", "activation", "1.1")); 
    jetty6xDependencies.add(new Dependency("geronimo-spec", "geronimo-spec-jta", "1.0.1B-rc4")); 
    jetty6xDependencies.add(new Dependency("xerces", "xercesImpl","2.6.2")); 
    jetty6xDependencies.add(new Dependency("xerces", "xmlParserAPIs","2.6.2")); 
    jetty6xDependencies.add(new Dependency("commons-logging", "commons-logging","1.0.4")); 
    jetty6xDependencies.add(new Dependency("log4j", "log4j", "1.2.14")); 

的问题的有tomcat的那些,因为它们使用JSP 2.0。因此,设置CLASSPATH的时候,你需要排除那些,和包括JSP-2.1,也就是

<dependencies> 
<dependency> 
    <groupId>org.mortbay.jetty</groupId> 
    <artifactId>jsp-2.1</artifactId> 
    <version>6.1.1rc1</version> 
</dependency> 

<dependency> 
    <groupId>org.eclipse.jdt</groupId> 
    <artifactId>core</artifactId> 
    <version>3.1.1</version> 
</dependency> 

因此,这里是整个配置:

<plugin> 
<groupId>org.codehaus.cargo</groupId> 
<artifactId>cargo-maven2-plugin</artifactId> 
<version>1.0.1</version> 
<configuration> 
    <container> 
     <containerId>jjetty6x</containerId> 
     <type>embedded</type> 
     <implementation> 
      org.codehaus.cargo.container.jetty.Jetty6xEmbeddedLocalContainer 
     </implementation> 
     <timeout>500000</timeout> 
     <dependencies> 
      <dependency> 
       <groupId>org.mortbay.jetty</groupId> 
       <artifactId>jsp-api-2.1</artifactId> 
      </dependency> 
      <dependency> 
       <groupId>log4j</groupId> 
       <artifactId>log4j</artifactId> 
      </dependency> 
      <dependency> 
       <groupId>commons-logging</groupId> 
       <artifactId>commons-logging</artifactId> 
      </dependency> 
      <dependency> 
       <groupId>xerces</groupId> 
       <artifactId>xmlParserAPIs</artifactId> 
      </dependency> 
      <dependency> 
       <groupId>xerces</groupId> 
       <artifactId>xercesImpl</artifactId> 
      </dependency> 
      <dependency> 
       <groupId>geronimo-spec</groupId> 
       <artifactId>geronimo-spec-jta</artifactId> 
      </dependency> 
      <dependency> 
       <groupId>javax.activation</groupId> 
       <artifactId>activation</artifactId> 
      </dependency> 
      <dependency> 
       <groupId>javax.mail</groupId> 
       <artifactId>mail</artifactId> 
      </dependency> 
      <!--replaced these:--> 
      <!--<dependency> 
       <groupId>tomcat</groupId> 
       <artifactId>jasper-compiler</artifactId> 
      </dependency> 
      <dependency> 
       <groupId>tomcat</groupId> 
       <artifactId>jasper-runtime</artifactId> 
      </dependency> 
      <dependency> 
       <groupId>tomcat</groupId> 
       <artifactId>jasper-compiler-jdt</artifactId> 
      </dependency>--> 
      <!--with this:--> 
      <dependency> 
       <groupId>org.mortbay.jetty</groupId> 
       <artifactId>jsp-2.1</artifactId> 
      </dependency> 
      <dependency> 
       <groupId>org.eclipse.jdt</groupId> 
       <artifactId>core</artifactId> 
      </dependency> 
      <dependency> 
       <groupId>org.mortbay.jetty</groupId> 
       <artifactId>servlet-api-2.5</artifactId> 
      </dependency> 
      <dependency> 
       <groupId>org.mortbay.jetty</groupId> 
       <artifactId>jetty</artifactId> 
      </dependency> 
      <dependency> 
       <groupId>org.mortbay.jetty</groupId> 
       <artifactId>jetty-util</artifactId> 
      </dependency> 
      <dependency> 
       <groupId>org.mortbay.jetty</groupId> 
       <artifactId>jetty-naming</artifactId> 
      </dependency> 
      <dependency> 
       <groupId>org.mortbay.jetty</groupId> 
       <artifactId>jetty-plus</artifactId> 
      </dependency> 
      <dependency> 
       <groupId>ant</groupId> 
       <artifactId>ant</artifactId> 
      </dependency> 
      <dependency> 
       <groupId>commons-el</groupId> 
       <artifactId>commons-el</artifactId> 
      </dependency> 
     </dependencies> 
    </container> 
    <configuration> 
     <deployables> 
      <deployable> 
       <groupId>gruopId</groupId> 
       <artifactId>artifact</artifactId> 
       <type>war</type> 
      </deployable> 
     </deployables> 
     <implementation> 
      org.codehaus.cargo.container.jetty.Jetty6xEmbeddedStandaloneLocalConfiguration 
     </implementation> 
</configuration> 
<executions> 
    <execution> 
     <id>start-container</id> 
     <phase>pre-integration-test</phase> 
     <goals> 
      <goal>start</goal> 
     </goals> 
    </execution> 
    <execution> 
     <id>stop-container</id> 
     <phase>post-integration-test</phase> 
     <goals> 
      <goal>stop</goal> 
     </goals> 
    </execution> 
</executions> 

请注意,您需要指定所有的依赖项两次 - 一次在插件中,一次作为项目依赖项。您可以从第一个片段获取版本。

+0

你使用的是什么版本的org.mortbay.jetty:jsp-api-2.1? – 2010-11-25 22:34:10

+0

6.1.1rc1(取自pom.xml的部分) – 2010-11-26 10:27:30

+0

现在我遇到了javax/el/ExpressionFactory的类加载问题。你在用什么JDK?另外,你能把你的整个聚甲醛放在什么地方吗? – 2010-11-30 01:51:54