1

プログラムの何が問題なのかわかりません。こんな通知が来ました。pom.xml ファイルに依存関係を正しく設定しました。

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

pom.xml

..
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
  <version>1.7.2</version>
</dependency> 
..
4

3 に答える 3

3

この警告を回避する簡単な方法の 1 つは、次のランタイム依存関係をプロジェクトの POM に追加することです。

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>1.7.2</version>
    <scope>runtime</scope>
</dependency>

これにより、INFO レベルのステートメントを出力する単純なロギングの実装が提供されます。このソリューションではすぐに使い物にならなくなりますが、コードが最終的に使用するロギング フレームワークを調査する時間ができます。

SLF4Jは、ロギングが実際にどのように実装されているかの詳細を隠すように設計されたフレームワークです。たとえば、実行時にlog4jcommons loggingJava loggingまたはlogbackを使用することを決定できます。

更新 1: 問題を再現する方法

次の Java プロジェクトで問題が再現されます。

|-- pom.xml
`-- src
    `-- main
        `-- java
            `-- HelloWorld.java

次のように Maven からプログラムを実行します。

$ mvn exec:java -Dexec.mainClass=HelloWorld
..
..
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

欠落している依存関係を POM に追加すると、プログラムはログの実装を持ち、次のようにログ ステートメントを発行するために使用できます。

$ mvn exec:java -Dexec.mainClass=HelloWorld
..
..
[HelloWorld.main()] INFO HelloWorld - Java says: Hello world
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

pom.xml

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.myspotontheweb.demo</groupId>
    <artifactId>my-project</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.2</version>
        </dependency> 
    </dependencies>
</project>

HelloWorld.java

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class HelloWorld {
    Logger log = LoggerFactory.getLogger(HelloWorld.class);

    public String speak(String speech) {
        log.info("Java says: {}", speech);

        return speech;
    }

    public static void main(String[] args) {
        HelloWorld hello = new HelloWorld();

        hello.speak("Hello world");
    }
}

更新 2: 実行可能な jar を作成する方法

実行可能な jar を作成するように Maven を構成すると、POM ファイルにリストされている依存関係を参照するクラスパスを使用して、jar が自動的にパッケージ化されます。

$ mvn clean package
$ java -jar target/my-project-1.0-SNAPSHOT.jar
[main] INFO HelloWorld - Java says: Hello world

pom.xml

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.myspotontheweb.demo</groupId>
    <artifactId>my-project</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.2</version>
        </dependency> 
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.7.2</version>
            <scope>runtime</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <mainClass>HelloWorld</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
于 2012-12-02T12:15:54.797 に答える
0

API しかありません。実装を提供します。

于 2012-12-02T11:58:59.967 に答える
-1

クラスパスに slf4j jar がないようです。slf4j ライブラリをダウンロードして、プロジェクトのクラス パスに追加します。

于 2012-12-02T11:34:54.680 に答える