当前位置: 首页 > 面试题库 >

在Spring 5中Jetty:run失败并出现NoSuchMethodError

柯冯浩
2023-03-14
问题内容

我正在尝试将Web应用程序更新为当前库。当我将Spring从3.1.1升级到5.0.0时,它因以下原因而开始失败:

java.lang.NoSuchMethodError: javax.servlet.http.HttpServletResponse.getStatus()I
    at org.springframework.web.servlet.FrameworkServlet.publishRequestHandledEvent(FrameworkServlet.java:1083)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1009)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:881)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:855)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1221)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1212)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:399)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766)
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450)

解释了很多,我已经升级了码头和servlet规范。但是我的应用程序不断失败。

依存关系:

[INFO] +- org.slf4j:jcl-over-slf4j:jar:1.7.5:compile
[INFO] |  \- org.slf4j:slf4j-api:jar:1.7.5:compile
[INFO] +- ch.qos.logback:logback-core:jar:1.1.1:compile
[INFO] +- ch.qos.logback:logback-classic:jar:1.1.1:compile
[INFO] +- org.codehaus.janino:janino:jar:2.6.1:compile
[INFO] |  \- org.codehaus.janino:commons-compiler:jar:2.6.1:compile
[INFO] +- org.springframework:spring-web:jar:5.0.0.RELEASE:compile
[INFO] |  +- org.springframework:spring-beans:jar:5.0.0.RELEASE:compile
[INFO] |  \- org.springframework:spring-core:jar:5.0.0.RELEASE:compile
[INFO] |     \- org.springframework:spring-jcl:jar:5.0.0.RELEASE:compile
[INFO] +- org.springframework:spring-webmvc:jar:5.0.0.RELEASE:compile
[INFO] |  +- org.springframework:spring-aop:jar:5.0.0.RELEASE:compile
[INFO] |  +- org.springframework:spring-context:jar:5.0.0.RELEASE:compile
[INFO] |  \- org.springframework:spring-expression:jar:5.0.0.RELEASE:compile
[INFO] +- javax.servlet:javax.servlet-api:jar:3.1.0:provided
[INFO] +- com.google.code.gson:gson:jar:2.2.2:compile
[INFO] \- junit:junit:jar:4.10:test
[INFO]    \- org.hamcrest:hamcrest-core:jar:1.1:test

Maven:

    <spring.framework.version>5.0.0.RELEASE</spring.framework.version>
    <maven-jetty-plugin.version>6.1.26</maven-jetty-plugin.version>
    <servlet.api.version>3.1.0</servlet.api.version>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>${spring.framework.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${spring.framework.version}</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>${servlet.api.version}</version>
        <scope>provided</scope>
    </dependency>

<build>
    <finalName>smartpos-backend-device</finalName>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
                <showWarnings>true</showWarnings>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.1</version>
            <executions>
                <execution>
                    <id>install</id>
                    <phase>install</phase>
                    <goals>
                        <goal>sources</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>maven-jetty-plugin</artifactId>
            <version>${maven-jetty-plugin.version}</version>

            <configuration>
                <jettyEnvXml>src/main/resources/jetty/jetty-env.xml</jettyEnvXml>
                <contextPath>smartpos-json</contextPath>
                <scanIntervalSeconds>0</scanIntervalSeconds>

                <connectors>
                    <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
                        <port>8080</port>
                    </connector>
                </connectors>
                <systemProperties>
                    <systemProperty>
                        <name>logback.configurationFile</name>
                        <value>logback.xml</value>
                    </systemProperty>
                    <systemProperty>
                        <name>LOG_PATH</name>
                        <value>.</value>
                    </systemProperty>
                </systemProperties>
            </configuration>
        </plugin>
    </plugins>
</build>

问题答案:

Spring 5至少需要一个Servlet 3.1容器,但是当您使用Jetty 6.1时(最多)是Servlet 2.5容器。因此,这显然是行不通的。

您将必须升级您的Jetty版本。要升级而不是升级,maven-jetty-plugin您将需要使用适当jetty-maven- plugin的名称(名称已更改),并且它现在是Eclipse的一部分。

<maven-jetty-plugin.version>9.4.7.v20170914</maven-jetty-plugin.version>

<plugin>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <version>${maven-jetty-plugin.version}</version>
</plugin>

这应该同时使用插件和Jetty的最新版本。



 类似资料:
  • 我正在用Lift+Scala开发一个web应用程序。一切都可以在Ubuntu Linux上运行。当我切换到Windows(生产环境)时,mvn jetty:run仍然有效,但mvn jetty:run-war不再有效,并且毫不奇怪,将WAR部署到jetty/tomcat在此环境中也不起作用。 下面是maven pom.xml http://pastebin.com/ekk57z2f 以下是运行mv

  • HTTP头所在的位置 现在在Spring 5上-这被更改为 现在头从-{accept=[application/json],content-type=[multipart/form-data;boundary=8hfyfdj_y58snxrsdxenwliqdsyixs50],content-length=[51024]} 我搜索了很多,发现了一个类似的问题,这似乎更密切相关--升级到Spring

  • 明显合并失败,存在多个错误。查看日志: 错误:任务“:app:processDebugManifest”的执行失败。

  • 所以,我是Android和Java的初学者。我才刚开始学习。当我今天在进行意图实验时,我发生了一个错误。 我在这里找到了一些解决方案,并试图实施,但并不奏效。 这是我的建筑。格雷德尔: 这是我的AndroidManifest: null 这是我编写代码的第一个星期,如果这是一件非常愚蠢的事情,我很抱歉。我对此真的是初来乍到,也没找到别的地方问。如果我违反了任何规则,我很抱歉

  • 我正在使用jenkins进行构建,但每次运行构建时都会出现错误并失败? 以下是错误: 致命:hudson/tasks/Mailer$UserProperty java。lang.ClassNotFoundException:哈德逊。任务。詹金斯的Mailer$UserProperty 。util。AntClassLoader。jenkins的findClassInComponents(AntCla

  • null 这里是我的项目级别构建。gradle 运行我的应用程序后,它显示如下错误- 运行gradle:processException时出错:进程“d:\androidstudio\login\android\gradlew.bat”异常退出: 错误:评估项目':app'时出现问题。 ASCII try:使用--stacktrace选项运行以获取堆栈跟踪。使用--info或--debug选项运行