0

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にあります。

どんな助けでも大歓迎です。

乾杯、

4

2 に答える 2

0

問題が正確に何であるかはわかりませんが、機能させることができました。ファイルをエクスポートしましたが、関連するソースファイルとプロパティファイルのみが選択されています。次に、それを他のプロジェクトの[注文とエクスポート]タブのリストの一番上に追加しました。

最終的に、jarをmaven依存関係として追加し、次にjarに必要なすべての依存関係を新しいプロジェクトにも追加しました。これでうまくいきました。

乾杯。

于 2012-10-01T16:56:19.110 に答える
0

不足しているjarは、コードではなくSLF4J自体のようです。フォルダー構造に基づいて、Maven を使用しているように見えます。テスト依存のみとしてマークされた slf4j-api.jar を持っている可能性はありますか? 実際には、それに対してコンパイルする必要があります(つまり、コンパイルの依存関係としてマークする) が、logback-classic や使用しているプラ​​グインなど、さまざまなプラグインをテストの依存関係にすることができます。

于 2012-07-11T23:16:25.157 に答える