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で正常に実行されているため、依存関係の欠落はありません。
コマンドラインからアプリケーション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を選択します。
log4j
の最新バージョンをインストールします((log4j-2.3.jar
をインストールしました)。
以下の手順に従ってください:
それは私のために働いた