2

eclipse ide を使用して Java で簡単なプロジェクトを作成し、log4j 機能をテストしました。Java の jar ツールを使用して、コマンド プロンプトからアプリケーションを実行する必要があります。logtest.java ファイルは、以下のようにロガーを定義する単純な Java ファイルです。別の Jar ファイルにあるロガーを参照しています。以下はディレクトリ構造です。

package com;

import org.apache.log4j.Logger;

public class logtest {

    private static Logger logger = Logger.getLogger(logtest.class);

    public static void main(String[] args) {
        System.out.println("---------------HIIIIII-----------");
    }

以下は、Eclipse のプロジェクトで作成したディレクトリ構造です。

src/com/logtest.java

lib/log4j-1.2.17.jar

マニフェスト ファイルのエントリは以下のとおりで、手動で maifest ファイルを作成しました。

Manifest-Version: 1.0
Main-Class: com.logtest
Class-Path: lib/log4j-1.2.17.jar

Jarファイルの内容は以下のとおりで、jarユーティリティを使用して解凍しました。

META-INF/MANIFEST.MF
.project
com/logtest.class
manifest.mf
lib/log4j-1.2.17.jar
.classpath

jar ファイルをエクスポートしました。commond java -jar JarTest2.jar を使用して実行しようとすると、次のエラーが発生します。

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Logger
    at com.logtest.<clinit>(logtest.java:6)

Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    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

クラスが見つからない例外であることは知っていますが、jdk1.5を使用して作成し、コマンドツールを実行すると、同じjarが正常に実行され、Javaクラスがエラーなしで実行されるという奇妙なことがあります。

すべてが同じなので、なぜこれが起こっているのかわかりません。

私のは64ビットのWindows 7マシンで、それが実行されている他のマシンは32ビットのXPマシンです。

もちろん、Eclipse ide のバージョンは両方のマシンで異なります。

私がやっていることに何か問題があるのか​​ 、それとも他に何か欠けているのか教えてください.

ありがとう

4

2 に答える 2

1

Java が組み込みの Jar をサポートしていないことは確かです。lib/log4j-1.2.17.jar ファイルをファイル システムに移動することをお勧めします (これにより、実行可能 Jar と同じ drctory 内にサブ フォルダー ./lib が作成され、それが違いを生むかどうかを確認できます。

本当に組み込みの Jar を使用したい場合は、One-Jarを読むことができます。

次のディレクトリ構造が必要です

.\JarTest2.jar
.\lib\log4j-1.2.17.jar

ファイルシステム上。log4jJar をJarTest2.jarファイルに埋め込む (中に含める)べきではありません

于 2012-08-12T19:16:25.887 に答える
0

log4j.jar が複製されていることを確認してください。たとえば、1 つの log4j.jar は lib フォルダーの下にあり、もう 1 つは eclipse の参照ライブラリーの下にありました。重複している場合は、1 つの jar を削除して、再度デプロイします。

于 2012-08-13T04:20:22.870 に答える