1

次のJavaコードがあり、以下のエラーが発生します。

import java.io.File;
import java.io.FileOutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import org.dbunit.database.DatabaseConnection;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSet;

public class export {
    public static void main(String[] args) throws Exception {
        // database connection
        Class.forName("net.sourceforge.jtds.jdbc.Driver");
        Connection jdbcConnection = DriverManager.getConnection(
            "jdbc:jtds:sqlserver://localhost:1433/exampleDB", "sa", "vista1");
        IDatabaseConnection connection = new DatabaseConnection(jdbcConnection);

        // full database export
        IDataSet fullDataSet = connection.createDataSet();
        FlatXmlDataSet.write(fullDataSet, new FileOutputStream("full.xml"));
    }
}

エラー:

$ java export

Exception in thread "main" java.lang.NoClassDefFoundError: org/dbunit/database/IDatabaseConnection
Caused by: java.lang.ClassNotFoundException: org.dbunit.database.IDatabaseConnection
        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)
Could not find the main class: export.  Program will exit.

コンパイルされるJavaファイルexport.javaの名前はであり、コンパイルされたファイルの名前はです。そして、ファイルをとと同じフォルダーにexport.class入れました。そして、次のcmdを使用してexport.javaをコンパイルしています。dbunit-2.4.8.jarjtds-1.2.5.jarexport.javaexport.class

$ javac -cp "dbunit-2.4.8.jar;jtds-1.2.5.jar" export.java

私が間違っていることについて何か考えはありますか?

4

4 に答える 4

5

私はこの問題を抱えていましたが、maven (m2eclipse) を使用して Eclipse 内から実行しました。scope=test を dbunit の依存関係から削除すると、問題は解決しました。

あなたと同じように、javacとjavaを使用してコンソールから実行しようとしましたが、同じエラーが発生しました。クラスパスに含めるのを忘れていたいくつかの依存関係が原因だったに違いありません。コンパイルに必要なのは dbunit.jar だけですが、dbunit クラスは実際に実行するために他のものに依存するため、実行時に他の jar をクラスパスに配置する必要があります (たとえば、slf4j)。

Eclispe 内から正常に実行されたときの依存関係は次のとおりです。 dbunit-2.4.8.jar junit-3.8.2.jar commons-collections-3.2.1.jar

それらをすべてクラスパスに配置して、機能するかどうかを確認してください。

エラーメッセージについて. 「メインクラスが見つかりませんでした: export. プログラムは終了します。'、それは本当ではありません。メインクラスが見つかり、2 行目以降のすべての行をコメントアウトした後、実行をデバッグできました。この問題は、org.dbunit.database.DatabaseConnection をインポートした場合にのみ発生します。このクラスがインポートされると、メイン クラスが DatabaseConnection をロードしようとし、それがクラスパスにないものをロードしようとするのだと思います。そのため、Java は誤解を招くエラー メッセージを表示します。

于 2012-05-18T22:00:45.780 に答える
1

これをOracleデータベースで使用していますが、正常に動作します^^

IDatabaseConnection connection = new DatabaseConnection(jdbcConnection, "SCHEMA_OF_YOUR_DB");
于 2012-03-27T09:30:43.383 に答える
0

あなたのスタックトレースはで終わります

「メイン クラスが見つかりませんでした: エクスポート。プログラムは終了します。」

これは、実行時に「エクスポート」がクラスパスにないことを示しています。クラスパスには「export.class」を含める必要があります。JAR と同じフォルダにあるからといって、自動的にクラスパスにあるわけではありません。

于 2010-12-06T22:08:52.577 に答える
0

コマンドラインを実行するときは、-cp パラメーターを含める必要がありますjava。そのようです:

java -cp "dbunit-2.4.8.jar;jtds-1.2.5.jar" export

于 2010-12-06T22:10:33.300 に答える