RMo*_*sey 5 jsp maven-2 tomcat7
我正在从Tomcat 6.0.24升级到7.0.23.我有一个maven 2.2.1项目,它使用jspc maven插件预编译JSP.
当我为我的应用程序部署WAR文件并尝试访问JSP时,我收到以下错误:
javax.servlet.ServletException: Error instantiating servlet class org.apache.jsp.my_jsp
...
root cause:
java.lang.NoClassDefFoundError: Lorg/apache/AnnotationProcessor;
java.lang.Class.getDeclaredFields0(Native Method)
java.lang.Class.privateGetDeclaredFields(Class.java:2291)
java.lang.Class.getDeclaredFields(Class.java:1743)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928)
...
Run Code Online (Sandbox Code Playgroud)
我曾尝试从这篇博文中借用一段POM 来使jspc与Tomcat 7一起工作,但这并没有解决问题.我该如何解决这个问题?任何指向正确的方向将不胜感激.
事实证明,我在子目录POM文件(myproject-war/pom.xml)中有另一个对JSPC插件的引用.在/pom.xml和myproject-war/pom.xml中修复它足以解决问题.这是我使用的更新的POM代码段:
<plugin>
<groupId>org.codehaus.mojo.jspc</groupId>
<artifactId>jspc-maven-plugin</artifactId>
<executions>
<execution>
<id>jspc</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
<configuration>
<inputWebXml>${basedir}/target/web.xml</inputWebXml>
<packageName>org.apache.jsp</packageName>
<source>1.5</source>
<target>1.5</target>
<trimSpaces>false</trimSpaces>
</configuration>
<dependencies>
<dependency>
<groupId>com.csc.aims</groupId>
<artifactId>aims-jar</artifactId>
<version>${project.version}</version>
<classifier>${env}</classifier>
</dependency>
<!--
Hack the jspc plugin, which only supports Tomcat 6, to work for Tomcat 7. See:
http://hasini-gunasinghe.blogspot.com/2011/09/how-to-use-pre-compiled-jsps-in-webapp.html
-->
<dependency>
<groupId>org.codehaus.mojo.jspc</groupId>
<artifactId>jspc-compiler-tomcat6</artifactId>
<version>2.0-alpha-3</version>
<exclusions>
<exclusion>
<groupId>org.apache.tomcat</groupId>
<artifactId>jasper</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.tomcat</groupId>
<artifactId>jasper-el</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.tomcat</groupId>
<artifactId>jasper-jdt</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.tomcat</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.tomcat</groupId>
<artifactId>jsp-api</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.tomcat</groupId>
<artifactId>el-api</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.tomcat</groupId>
<artifactId>annotations-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jasper</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.jdt.core.compiler</groupId>
<artifactId>ecj</artifactId>
<version>3.5.1</version>
</dependency>
</dependencies>
</plugin>
Run Code Online (Sandbox Code Playgroud)
另外,我不得不更新我的tomcat提供的依赖项,因为每个Tomcat依赖项的artifactId在新版本中已经改变; 例如:
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jasper</artifactId>
<version>${tomcat.version}</version>
<scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
代替:
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>jasper</artifactId>
<version>${tomcat.version}</version>
<scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
(注意:tomcat.version是我的主POM中定义的属性):
<properties>
...
<tomcat.version>7.0.23</tomcat.version>
...
</properties>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9434 次 |
| 最近记录: |