2017-04-15 12 views
0

バージョン1.5.2のSpring Bootから次のエラーが発生しました。トレースではTomcatバージョン8.5.11を取得し、javax.servletバージョン3.1を使用しています。私が見ているところでは、バージョン3.1は問題の修正でなければならないと言われていますが、.m2ディレクトリの下にあるリポジトリを削除してもまだそれがあります。ここでSpringブート1.5.2スタートアップ:java.lang.NoSuchMethodError:javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String;

java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].TomcatEmbeddedContext[]] 
    at java.util.concurrent.FutureTask.report(FutureTask.java:122) [na:1.8.0_66] 
    at java.util.concurrent.FutureTask.get(FutureTask.java:192) [na:1.8.0_66] 
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:939) ~[tomcat-embed-core-8.5.11.jar:8.5.11] 
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:872) [tomcat-embed-core-8.5.11.jar:8.5.11] 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) [tomcat-embed-core-8.5.11.jar:8.5.11] 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1419) [tomcat-embed-core-8.5.11.jar:8.5.11] 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409) [tomcat-embed-core-8.5.11.jar:8.5.11] 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_66] 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_66] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_66] 
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_66] 
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].TomcatEmbeddedContext[]] 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167) [tomcat-embed-core-8.5.11.jar:8.5.11] 
    ... 6 common frames omitted 
Caused by: org.apache.catalina.LifecycleException: Failed to start component [Pipeline[StandardEngine[Tomcat].StandardHost[localhost].TomcatEmbeddedContext[]]] 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167) [tomcat-embed-core-8.5.11.jar:8.5.11] 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5099) ~[tomcat-embed-core-8.5.11.jar:8.5.11] 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) [tomcat-embed-core-8.5.11.jar:8.5.11] 
    ... 6 common frames omitted 
Caused by: org.apache.catalina.LifecycleException: Failed to start component [org.apache.catalina.authenticator.NonLoginAuthenticator[]] 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167) [tomcat-embed-core-8.5.11.jar:8.5.11] 
    at org.apache.catalina.core.StandardPipeline.startInternal(StandardPipeline.java:170) ~[tomcat-embed-core-8.5.11.jar:8.5.11] 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) [tomcat-embed-core-8.5.11.jar:8.5.11] 
    ... 8 common frames omitted 
    Caused by: java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String; 
    at org.apache.catalina.authenticator.AuthenticatorBase.startInternal(AuthenticatorBase.java:1137) ~[tomcat-embed-core-8.5.11.jar:8.5.11] 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) [tomcat-embed-core-8.5.11.jar:8.5.11] 
    ... 10 common frames omitted 

は私が輸入しています依存関係のリストです:

<properties> 
    <tomcat.version>8.5.11</tomcat.version> 
</properties> 
<dependencies> 
<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>javax.servlet-api</artifactId> 
    <version>3.1.0</version> 
    <scope>provided</scope> 
</dependency> 
<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter</artifactId> 
    <version>1.5.2.RELEASE</version> 
</dependency> 
<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-security</artifactId> 
    <version>1.5.2.RELEASE</version> 
</dependency> 
<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-beans</artifactId> 
    <version>4.3.2.RELEASE</version> 
</dependency> 
<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-context</artifactId> 
    <version>4.3.2.RELEASE</version> 
</dependency> 
<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-jdbc</artifactId> 
    <version>4.3.2.RELEASE</version> 
</dependency> 
<dependency> 
    <groupId>org.postgresql</groupId> 
    <artifactId>postgresql</artifactId> 
    <version>9.4-1206-jdbc42</version> 
</dependency> 
<dependency> 
    <groupId>org.springframework.security.oauth</groupId> 
    <artifactId>spring-security-oauth2</artifactId> 
    <version>2.0.10.RELEASE</version> 
</dependency> 
<dependency> 
    <groupId>org.springframework.security</groupId> 
    <artifactId>spring-security-core</artifactId> 
    <version>4.1.1.RELEASE</version> 
</dependency> 
<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-tomcat</artifactId> 
    <version>1.5.2.RELEASE</version> 
</dependency> 
<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-test</artifactId> 
    <version>4.3.3.RELEASE</version> 
</dependency> 
<dependency> 
    <groupId>com.auth0</groupId> 
    <artifactId>java-jwt</artifactId> 
    <version>2.2.1</version> 
</dependency> 
<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-context</artifactId> 
    <version>4.3.3.RELEASE</version> 
</dependency> 
<!-- https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt --> 
<dependency> 
    <groupId>io.jsonwebtoken</groupId> 
    <artifactId>jjwt</artifactId> 
    <version>0.6.0</version> 
</dependency> 
<dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
    <version>4.12</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.httpcomponents</groupId> 
    <artifactId>httpclient</artifactId> 
    <version>4.5.1</version> 
</dependency> 
</dependencies> 
+0

[NoSuchMethodErrorを取得する可能性のある重複:javax.servlet.ServletContext.getVirtualServerName()春ブーツはので、あなたのTomcatバージョン8の代わりにTomcat 7がそうコードあなたのpom.xmlを追加定義するデフォルトのTomcat 7を実行します](http:// stackoverflow。コム/質問/ 34950164 /取得-nosuchmethoderrorjavax - サーブレットのServletContext-getvirtualservername) –

+0

私は私の答えをコピーし、ローカルのMavenリポジトリ –

+0

を更新するようにしてください。それがあなたを助けて欲しい!あなたは何か質問があれば、plsは教えて! –

答えて

-1

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-web</artifactId> 
    <version>1.5.2.RELEASE</version> 
</dependency> 
0

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter</artifactId> 
    <version>1.5.2.RELEASE</version> 
</dependency> 

を変更しようとする中で、私は、これでそれを固定しましたpom.xml

<properties> 
    <tomcat.version>7.0.56</tomcat.version> 
    </properties> 
0

メソッドgetVirtualServerNameがServlet 3.1のServletContextに追加されました。この問題は、少なくとも3つの原因が考えられますgetVirtualServerName

Javaのドキュメントのメソッド検索:

  1. サーブレットのバージョンが3.1という古いです。

  2. 他のjarは3.1よりも古いサーブレットを持っています。

  3. あなたのTomcatのバージョンが古いより8

はそれを解決するために、あなたは以下の方法を試すことができます。

私は以下のコードがあるかどうかをpom.xmlで確認します。

<dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>javax.servlet-api</artifactId> 
     <version>3.1.0</version> 
    </dependency> 

あなたのpom.xmlに上記のコードがある場合でも、それでも問題はあります。あなたは第二のやり方をすることができます。

II。他の瓶を確認するにはjavax.servlet-api瓶を参照してください。たとえば、org.apache.santuarioは、javax.servlet-api jarを参照しています。 pom.xml:

<dependency> 
    <groupId>org.apache.santuario</groupId> 
    <artifactId>xmlsec</artifactId> 
    <version>1.4.3</version> 
</dependency> 

いますが、Mavenの依存関係を見ると、それはそのバージョン3.1より2.3古いjavax.servlet-api jarファイルを参照してください。

enter image description here

ので、あなたは、2.3バージョンを除外する必要があります。 pom.xml:

<!-- exclude servlet-api 2.3 jar--> 
<dependency> 
    <groupId>org.apache.santuario</groupId> 
    <artifactId>xmlsec</artifactId> 
    <version>1.4.3</version> 
    <exclusions> 
     <exclusion> 
      <groupId>javax.servlet</groupId> 
      <artifactId>servlet-api</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 

<!-- servlet-api 3.1 version has getVirtualServerName() --> 
<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>javax.servlet-api</artifactId> 
    <version>3.1.0</version> 
</dependency> 

III。

<properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
     <java.version>1.8</java.version> 
     <tomcat.version>8.5.5</tomcat.version> 
    </properties> 
関連する問題