Maven Javaプロジェクトからjarファイルを作成し、これを別のプロジェクトの外部jarファイルとして追加したいと思います。ただし、NoClassDefFoundErrorエラーが発生し続けます。
Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
at com.tutelatechnologies.dashboard.DataUsageLogs.Logging.getlogger(Logging.java:10)
at com.tutelatechnologies.dashboard.DataUsageLogs.Logging.d(Logging.java:26)
at com.tutelatechnologies.dashboard.DataUsageLogsRunner.DUL_TESTER.main(DUL_TESTER.java:11)
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
... 3 more
jarファイルは非常に単純です。Log4JおよびSLF4Jでログを記録するためのラッパーが含まれているだけです。私はそれを一撃で含めました:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Logging {
public void e(String msg, Class inputClass)
{
Logger logs = LoggerFactory.getLogger(inputClass);
logs.error(msg);
}
public void w(String msg, Class inputClass)
{
Logger logs = LoggerFactory.getLogger(inputClass);
logs.warn(msg);
}
public void d(String msg, Class inputClass)
{
Logger logs = LoggerFactory.getLogger(inputClass);
logs.debug(msg);
}
public void t(String msg, Class inputClass)
{
Logger logs = LoggerFactory.getLogger(inputClass);
logs.trace(msg);
}
}
次に、このプロジェクトを右クリックし、[エクスポート]-> [Java]-> [Jarファイル]を選択して、[完了]をクリックします。すべてのフォルダを選択したままにします。
次に、新しいプロジェクトに移動し、プロジェクトを右クリックしてjarファイルを追加し、[ビルドパス]->[ビルドパスの構成]を選択します。次に、[ライブラリ]タブで、[外部Jarの追加]ボタンをクリックして、jarファイルにリンクします。ソースコードとjavadocを添付して、正しくリンクされていることを確認します。問題ないように見えますが、実行するとNoClassDefFoundErrorが発生します。これは、Eclipseがjarファイルに依存関係を追加するために継ぎ目がないためです。
プロジェクトをJavaビルドパスに追加すると、これを機能させることができます。しかし、私はこれを自己完結型のjarファイルにしたいのです。LoggerFactory.getLogger(inputClass);にヒットするとバラバラになります。これはslf4jの依存関係を探しています。
次の行は、これをテストするために使用される唯一の行です。
Logging.d("test", thisClass.class);
すべての依存関係を単一のjarファイルにパックして、正しくリンクさせることは可能ですか?
参考までに、これをRunnable Jarにしようとしましたが、これは機能するように継ぎ目がありますが、jarファイルはlog4j.propertiesファイルにリンクする方法を認識していません。このファイルはsrc/main/resourcesにあります。
どんな助けでも大歓迎です。
乾杯、