2012-02-15 30 views
2

私は、Eclipse 3.7にm2eとMaven Integration for WTPプラグインがインストールされています。Spring 3.x tutorialを試しています。Spring 'mvc-basic'チュートリアルでSLF4J LoggerFactoryのインスタンス化に失敗しました

私はMavenのプロジェクトに上記のチュートリアルを変換するが、私は、Webアプリケーションを展開するときに、私は次の例外を取得:

Failed to instantiate SLF4J LoggerFactory 
Reported exception: 
    java.lang.NoClassDefFoundError: org/apache/log4j/Level 

私の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/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>org.springframework.samples</groupId> 
    <artifactId>mvc-basic</artifactId> 
    <name>mvc-basic</name> 
    <packaging>war</packaging> 
    <version>1.0.0-SNAPSHOT</version> 
    <properties> 
     <org.springframework.version>3.0.5.RELEASE</org.springframework.version> 
     <org.slf4j.version>1.6.1</org.slf4j.version> 
    </properties> 
    <dependencies> 

     <!-- Spring --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version>${org.springframework.version}</version> 
      <exclusions> 
       <!-- Exclude Commons Logging in favor of SLF4j --> 
       <exclusion> 
        <groupId>commons-logging</groupId> 
        <artifactId>commons-logging</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
      <version>${org.springframework.version}</version> 
     </dependency> 

     <!-- Logging --> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>${org.slf4j.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>jcl-over-slf4j</artifactId> 
      <version>${org.slf4j.version}</version> 
      <scope>runtime</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-log4j12</artifactId> 
      <version>${org.slf4j.version}</version> 
      <scope>runtime</scope> 
     </dependency> 
     <dependency> 
      <groupId>log4j</groupId> 
      <artifactId>log4j</artifactId> 
      <version>1.2.16</version> 
      <scope>runtime</scope> 
     </dependency> 

     <!-- JSR 303 with Hibernate Validator --> 
     <dependency> 
      <groupId>javax.validation</groupId> 
      <artifactId>validation-api</artifactId> 
      <version>1.0.0.GA</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-validator</artifactId> 
      <version>4.1.0.Final</version> 
     </dependency> 

     <!-- Joda Time --> 
     <dependency> 
      <groupId>joda-time</groupId> 
      <artifactId>joda-time</artifactId> 
      <version>1.6.2</version> 
      <scope>runtime</scope> 
     </dependency> 
     <dependency> 
      <groupId>joda-time</groupId> 
      <artifactId>joda-time-jsptags</artifactId> 
      <version>1.0.2</version> 
      <scope>runtime</scope> 
     </dependency>  

     <!-- Servlet --> 
     <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> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>jstl</artifactId> 
      <version>1.2</version> 
     </dependency> 

     <!-- Test --> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.7</version> 
      <scope>test</scope> 
     </dependency> 
    </dependencies> 
    <repositories> 
     <!-- For Hibernate Validator --> 
     <repository> 
      <id>org.jboss.repository.release</id> 
      <name>JBoss Maven Release Repository</name>   
      <url>https://repository.jboss.org/nexus/content/repositories/releases</url> 
      <snapshots><enabled>false</enabled></snapshots>   
     </repository> 
    </repositories> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>1.5</source> 
        <target>1.5</target> 
        <showWarnings>true</showWarnings> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-war-plugin</artifactId> 
       <configuration> 
        <warName>mvc-basic</warName> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-dependency-plugin</artifactId> 
       <executions> 
        <execution> 
         <id>install</id> 
         <phase>install</phase> 
         <goals> 
          <goal>sources</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

私はまた、 'プロジェクトのプロパティ' - > 'Javaビルドパス' - > 'ライブラリ'でチェックされていますが、私が見つけたlog4j jarは 'Maven Dependencies'の下にあるものだけです

jars bu私は自分で解決策を見つけることができません。

+0

SLF \t \t \t \t \t ための別のPOMエントリがあるorg.slf4j \t \t \t SLF4J-API \t \t \t $ {org.slf4j.version} ランタイム \t \tの Chetan

+0

が重複する可能性[例外を修正する方法:?SLF4J LoggerFactoryをインスタンス化に失敗しました](http://stackoverflow.com/questions/15246157/how-to-fix-exception-failed-to-instantiate- slf4j-loggerfactory) – kenorb

答えて

0

eclipseでプロジェクトとサーバーをクリーニングしてみてください。それは爽やかな問題のようです。

EclipseでMaven(M2E)を使用している場合は、libが「Maven Dependencies Section」にしかないことが正しいです。

Springソースツールスイートテンプレートプロジェクト(これはmavenベース)から始め、チュートリアルのコードをこのプロジェクトにコピーすることができます。

Tomcatを使用している場合、Eclipseはlibsをworkspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp<VERSION>\wtpwebapps\<PROJECT>\WEB-INF\libにコピーする必要があります。 libがそこになければ、あなたがすべてのものを参照していても、eclipseはそれをコピーしません。次に、最後に行うことは、サーバーからプロジェクトを削除する([追加と削除]ダイアログで)[完了]を押してから、プロジェクトを再度追加することです。

+0

プロジェクトをリフレッシュ(F5)し、Mavenでプロジェクトの設定を更新し、Tomcat Work Directoryを消去して、プロジェクトを最初から再発行しましたが、まだ問題は残っています。 – Piwakkio

+0

プロジェクトはコンパイルされますか? (問題ビューにエラーはありません)? – Ralph

+0

jdkは 'strictly compatible'(1ではなく、1.7)という2つの警告のみが表示されます。5)、シリアル化可能なクラスで静的な最終UIDが見つからない – Piwakkio

0

他のライブラリのように見えますが、SLF4Jに依存しています。 WARファイルを作成し、戦争中にSLF4J.jarがパッケージ化されているかどうかを確認します。そうでない場合は、Appservers common libディレクトリを確認してください。それをロードする場合。 pom.xmlの依存関係グラフを確認してください。

下記のSLF4J log4j APIを追加したい場合は、依存関係です。

<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-log4j12</artifactId> 
    <version>1.6.4</version> 
</dependency> 
+0

私はプロジェクトのWARを作成し、SLF4J.jarが見つからないことがわかりましたが、依存関係を投稿したSLF4J-log4j12-1.6.1.jarがあります。あれは正しいですか? – Piwakkio

関連する問題