java.lang.ClassNotFoundException: org.apache.jsp.index_jsp [英] java.lang.ClassNotFoundException: org.apache.jsp.index_jsp

查看:24
本文介绍了java.lang.ClassNotFoundException: org.apache.jsp.index_jsp的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个旧的 struts 1 应用程序,它一直使用 Ant 构建,我正在将其转换为使用 Maven.我的应用程序的结构是模块化的,包含模块中的依赖项管理.包含模块的 dep mgmt 部分包含:

I have an old struts 1 app that has always been built using Ant, which I'm converting to use Maven instead. The structure of my app is modular, with dependency management in the containing module. The containing module's dep mgmt section contains:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.0</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        ...
    </dependencies>
</dependencyManagement>

当我构建战争(我从包含模块运行 package Maven 作业)并使用来自 intelliJ 的战争运行 Tomcat 配置时,我在浏览器中看到以下内容:

When I build the war (I run the package Maven job from the containing module) and run a Tomcat configuration with that war from intelliJ, I see the following in my browser:

org.apache.jasper.JasperException: org.apache.jasper.JasperException: Unable to load class for JSP
org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:161)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:340)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

root cause
org.apache.jasper.JasperException: Unable to load class for JSP
org.apache.jasper.JspCompilationContext.load(JspCompilationContext.java:630)
org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:149)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:340)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

root cause
java.lang.ClassNotFoundException: org.apache.jsp.index_jsp
java.net.URLClassLoader$1.run(URLClassLoader.java:202)
java.security.AccessController.doPrivileged(Native Method)
java.net.URLClassLoader.findClass(URLClassLoader.java:190)
org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:134)
org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:66)
org.apache.jasper.JspCompilationContext.load(JspCompilationContext.java:628)
org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:149)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:340)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

我从搜索中找到的所有内容都表明原因是 javax.servlet jars 中的版本冲突,但我的 WEB-INF/lib 目录中根本没有任何内容.我曾尝试使用 providedcompile 甚至 install/pom 的范围,但这些都没有任何帮助.

Everything I can find from searching on this suggests the cause is a version conflict in javax.servlet jars, but there is nothing in my WEB-INF/lib directory at all. I have tried using scope of provided, compile, and even install/pom, but those don't do anything helpful.

tomcat 日志中没有任何其他内容.

There is nothing additional in the tomcat logs.

我确认正在编译jsps.我正在使用 jspc-maven-plugin.

I confirmed that the jsps are being compiled. I am using jspc-maven-plugin.

在我的子模块(不是包含的)pom.xml 中,我有:

In my sub-module's (not the containing one's) pom.xml, I have:

<build>
    <!-- default goal to run if somebody doesn't pick one (rarely matters) -->
    <defaultGoal>install</defaultGoal>

    <!-- resources and filtering - also see configuration under maven-war-plugin below -->
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
    <filters>
        <filter>src/main/resources/${env}.properties</filter>
        <filter>src/main/resources/${env}.tokens</filter>
    </filters>

    <plugins>
        <!-- begin - precompiling jsps -->
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>jspc-maven-plugin</artifactId>
            <executions>
                <execution>
                    <id>jspc</id>
                    <goals>
                        <goal>compile</goal>
                    </goals>
                    <configuration>
                        <warSourceDirectory>${basedir}/src/main/webroot</warSourceDirectory>
                        <inputWebXml>${basedir}/src/main/webroot/WEB-INF/web.xml</inputWebXml>
                        <!--<workingDirectory>${basedir}/src/main/webroot</workingDirectory>-->
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <!-- end - precompiling jsps -->

        <!-- used to build warfiles -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.0</version>
            <configuration>
                <webResources>
                    <resource>
                        <directory>${pom.basedir}/src/main/webroot</directory>
                        <filtering>true</filtering>
                        <!--<targetPath>WEB-INF</targetPath>-->
                    </resource>
                </webResources>
            </configuration>
        </plugin>
    </plugins>
</build>

我可以在 Maven 构建输出中看到正在编译 jsps.但我仍然收到 JasperException.

I can see in the maven build output that the jsps are being compiled. But I still get the JasperException.

推荐答案

我发布这个已经有一段时间了,但我想我会展示我是如何解决这个问题的(就我现在的记忆而言).

It's been a while since I posted this, but I thought I would show how I figured it out (as best as I recall now).

我做了一个 Maven 依赖树来查找依赖冲突,并且我删除了所有与依赖项中排除项的冲突,例如:

I did a Maven dependency tree to find dependency conflicts, and I removed all conflicts with exclusions in dependencies, e.g.:

<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging-api</artifactId>
    <version>1.1</version>
    <exclusions>
        <exclusion>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
        </exclusion>
    </exclusions>
</dependency>

此外,我对 javax.servlet 依赖项使用了 provided 范围,以免在运行应用程序时与 Tomcat 提供的内容产生额外冲突.

Also, I used the provided scope for javax.servlet dependencies so as not to introduce an additional conflict with what is provided by Tomcat when I run the app.

<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>

HTH.

这篇关于java.lang.ClassNotFoundException: org.apache.jsp.index_jsp的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆