web-dev-qa-db-ja.com

log4j2 Java.lang.NoClassDefFoundError:org / Apache / logging / log4j / LogManager

Javaアプリケーションでlog4j 2.3を使用しています。mavenを介して依存関係を追加しました。
Eclipseでプログラムを実行するとすべてが正常に機能しますが、mavenでパッケージ化してjarを実行しようとすると、次のエラーが発生します。

Exception in thread "main" Java.lang.NoClassDefFoundError: org/Apache logging/log4j/LogManager
    at main.myclass.<clinit>(myclass.Java:11)
Caused by: Java.lang.ClassNotFoundException: org.Apache.logging.log4j.LogManager 


    at Java.net.URLClassLoader.findClass(Unknown Source)
    at Java.lang.ClassLoader.loadClass(Unknown Source)
    at Sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at Java.lang.ClassLoader.loadClass(Unknown Source)
    ... 1 more

Jarから実行しているときにクラスを見つけることができないのはなぜですか?

log4j 1.2の追加も機能しませんでした。プログラムはEclipseで正常に実行されているため、依存関係の欠落はありません。

9
Pabi

コマンドラインからアプリケーションjarを実行している場合、依存jarは実行時に使用できません。これらの2つのプラグインのいずれかをpom.xmlに含める必要があるため、実行時に依存関係を利用できます。

使用:maven-shade-plugin

<plugin>
        <groupId>org.Apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>2.4.1</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <transformers>
                <transformer implementation="org.Apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                  <mainClass>org.sonatype.haven.HavenCli</mainClass>
                </transformer>
              </transformers>
            </configuration>
          </execution>
        </executions>
      </plugin>

使用:maven-dependency-plugin

<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.8</version>
    <executions>
        <execution>
             <id>copy-dependencies</id>
             <phase>package</phase>
             <goals>
                 <goal>copy-dependencies</goal>
             </goals>
             <configuration>
                 <outputDirectory>${project.build.directory}/lib</outputDirectory>
             </configuration>
        </execution>
     </executions>
</plugin>

mvn package uber jarを生成します/または依存関係をoutputDirectoryにコピーします。私は、1つのjarとすべての依存関係を生成するためにmaven-shade-pluginを選択します。

14
Garry

log4jの最新バージョンをインストールします((log4j-2.3.jarをインストールしました)

以下の手順に従ってください:

  • プロジェクトを右クリック->ビルドパス->ライブラリ->外部JARを追加-> Log4j、Log4jコア、およびLog4j API jarを含めます。

それは私のために働いた

0
user11800640