gpt4 book ai didi

Tomcat 7 上的 JSP 失败,NoClassDefFoundError : Lorg/apache/AnnotationProcessor

转载 作者:行者123 更新时间:2023-12-04 18:49:06 28 4
gpt4 key购买 nike

我正在从 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)
...

我曾尝试从 this blog post 借用 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>

另外,我不得不更新我的 tomcat 提供的依赖项,因为每个 Tomcat 依赖项的 artifactId 在新版本中都发生了变化;前任:
                <dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jasper</artifactId>
<version>${tomcat.version}</version>
<scope>provided</scope>
</dependency>

代替:
                <dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>jasper</artifactId>
<version>${tomcat.version}</version>
<scope>provided</scope>
</dependency>

(注意:tomcat.version 是在我的主 POM 中定义的属性):
<properties>
...
<tomcat.version>7.0.23</tomcat.version>
...
</properties>

关于Tomcat 7 上的 JSP 失败,NoClassDefFoundError : Lorg/apache/AnnotationProcessor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8931007/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com