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を使用します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加