2017-02-03 16 views
1

私はSpringブートアプリケーションをスタンドアロンのtomcatで実行しようとしています。私は、Eclipseでアプリケーションを実行すると、それは私にこのエラーTomcat7とLog4の問題でのSpringブートデプロイ

java.io.IOException: java.lang.ClassNotFoundException: org.apache.logging.log4j.core.web.Log4jServletContainerInitializer 
     at org.apache.catalina.startup.WebappServiceLoader.loadServices(WebappServiceLoader.java:200) 
     at org.apache.catalina.startup.WebappServiceLoader.load(WebappServiceLoader.java:158) 
     at org.apache.catalina.startup.ContextConfig.processServletContainerInitializers(ContextConfig.java:1579) 
     at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1280) 
     at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:888) 
     at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:388) 
     at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117) 
     at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) 
     at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5522) 
     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145) 
     at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:899) 
     at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:875) 
     at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652) 
     at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1092) 
     at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1984) 
     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
     at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.core.web.Log4jServletContainerInitializer 
     at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1892) 
     at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1735) 
     at java.lang.Class.forName0(Native Method) 
     at java.lang.Class.forName(Class.java:348) 
     at org.apache.catalina.startup.WebappServiceLoader.loadServices(WebappServiceLoader.java:197) 

私のpom.xml

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.example</groupId> 
    <artifactId>codingtest</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>war</packaging> 

    <name>codingtest</name> 
    <description>Demo project for Spring Boot</description> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.5.1.RELEASE</version> 
     <relativePath/> <!-- lookup parent from repository --> 
    </parent> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
     <java.version>1.8</java.version> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>org.hamcrest</groupId> 
      <artifactId>hamcrest-library</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>com.google.code.gson</groupId> 
      <artifactId>gson</artifactId> 
      </dependency> 
     <dependency> 
      <groupId>org.apache.camel</groupId> 
      <artifactId>camel-spring-boot-starter</artifactId> 
      <version>2.18.2</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-security</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>jstl</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.tomcat.embed</groupId> 
      <artifactId>tomcat-embed-jasper</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>co.paralleluniverse</groupId> 
      <artifactId>comsat-tomcat-loader</artifactId> 
      <version>0.1.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-tomcat</artifactId> 
      <scope>provided</scope> 
     </dependency> 
    </dependencies> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

を与えるしかし、それはどんな問題なく動作します。問題は、私は、スタンドアロンのTomcat上でそれを実行したときに起こっ7.

UPDATE

私は、依存関係を削除し、戦争をインストールしようとした欠落しているクラスが

<dependency> 
      <groupId>co.paralleluniverse</groupId> 
      <artifactId>comsat-tomcat-loader</artifactId> 
      <version>0.1.1</version> 
      <scope>runtime</scope> 
     </dependency> 

で使用されていました気づきますTomcat 7のファイルです。今回は別のエラーが発生しました。

Caused by: java.lang.ClassNotFoundException: org.apache.tomcat.util.descriptor.tld.TldParser 
     at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1892) 
     at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1735) 
     ... 15 more 

Feb 03, 2017 7:37:18 PM org.apache.catalina.startup.HostConfig deployWAR 
SEVERE: Error deploying web application archive D:\apache-tomcat-7.0.73\webapps\ROOT.war 
java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]] 
     at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:903) 
     at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:875) 
     at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652) 
     at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1092) 
     at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1984) 
     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
     at java.lang.Thread.run(Thread.java:745) 

私はガイドhttp://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#build-tool-plugins-maven-packagingを見ると簡単なピースと思われる。しかし、それは実生活ではありません。

私はここで何が欠けていますか?春ブーツがSLF4Jと、すべての標準のロガーが付属しています

+0

で述べたように

  • SpringBootServletInitializerをあなたに私の春のブートアプリケーションを拡張しましたWARファイルをコンパイルしてサーバーにデプロイするとしますか?通常は、Apache Logging jarをパックしていないためです。私はあなたの 'pom.xml'でそれを見ません。 – FaithReaper

  • +0

    はいそれをwarファイルとしてコンパイルし、サーバーに展開します。私は ' \t \t org.apache.loggingを追加しようとしました。log4jの \t \t log4jのコア \t \t 'が、結果は同じです。実際に私がEclipse内で検索したとき、クラス 'Log4jServletContainerInitializer'が 'comsat-tomcat-loader'依存関係内にあることがわかりました。 – abiieez

    +0

    jarファイルをTomcat 7'libs'の下に置きますか?私はあなたのような状況にあって、ハックが私を助けてくれました。 – FaithReaper

    答えて

    0

    それは、私はlog4jのを使用して、次の

    1. 削除comsat-tomcat-loader dependendcy(@FrVaBeのおかげで)やっ修正。 「Tomcatの7上でそれを実行している」と言ってdocs.spring.io/spring-boot/docs/current/reference/html/

    1

    使用SLF4J、あなたは余分な依存関係を必要としない

    $ jar tvf target/spring-boot-0.1.0.jar | egrep 'log|slf' 
    41077 Tue Dec 13 18:07:58 GMT 2016 BOOT-INF/lib/slf4j-api-1.7.22.jar 
    470633 Fri Dec 09 11:03:02 GMT 2016 BOOT-INF/lib/logback-core-1.1.8.jar 
    16521 Tue Dec 13 18:09:00 GMT 2016 BOOT-INF/lib/jcl-over-slf4j-1.7.22.jar 
    305137 Fri Dec 09 11:05:04 GMT 2016 BOOT-INF/lib/logback-classic-1.1.8.jar 
    23647 Tue Dec 13 18:09:06 GMT 2016 BOOT-INF/lib/log4j-over-slf4j-1.7.22.jar 
        2310 Thu Dec 22 23:48:14 GMT 2016 BOOT-INF/lib/spring-boot-starter-logging-1.4.3.RELEASE.jar 
        4596 Tue Dec 13 18:09:14 GMT 2016 BOOT-INF/lib/jul-to-slf4j-1.7.22.jar 
    66802 Thu May 28 09:49:34 BST 2015 BOOT-INF/lib/jboss-logging-3.3.0.Final.jar 
    
    1

    log4jの(1)サポートは春ブーツ1.3(Release Notesを参照)を滴下しました。したがって、クラスパス上にlog4j jarがない可能性があります。しかし、クラスパスにjarファイルを追加しても、Springブートlog4jサポートは返されません。

    したがって、サポートされているロギングフレームワークを使用するか、Spring Bootを1.3より下のバージョンにロールバックするか(実際には推奨されません)、またはlog4j(1)をSpring Boot 1.5で動作させることを検討してください。

    更新:私は今、log4j1(私が最初に仮定した)を使用していませんが、すでにlog4j2を使用しています。それは大丈夫です。この場合、おそらくConfigure Log4j for loggingの方法については、Spring Boot instuctionsに従う必要があります。

    間違った方向にあなたを指して申し訳ありません

    ...

    +0

    私は決して明示的にSpring Bootにlog4jを使用するよう指示しません。エラーはどこからも飛び出しました。 Springブートに、slf4jと言うことを教えるにはどうすればいいですか? – abiieez

    +1

    質問はあなたのコード(またはあなたが使っているライブラリ)がロギングフレームワークとして使っているものです。 log4jが使用されているように見えます。もしあれば、ClassNotFoundExceptionsを避けるためにライブラリを提供する必要があります。 Spring Bootのロギング設定プロパティはおそらく動作しません。 Spring-Bootの[logging](http://docs.spring.io/spring-boot/docs/1.5.1.RELEASE/reference/htmlsingle/#boot-features-logging)のドキュメントを見てください。 log4j ** 2 **は、log4jが記述されているときに意味することに注意してください。 – FrVaBe

    +0

    修正プログラムは、log4jを使用する 'comsat-tomcat-loader'を削除することでした(あなたに感謝します)。 Springブートアプリケーションをhttp://docs.spring.io/spring-boot/docs/current/reference/html/howto-traditional-deployment.htmlに記載されているように 'SpringBootServletInitializer'で拡張する。 – abiieez

    関連する問題