Ошибка использования DBunit для экспорта БД "java.lang.NoClassDefFoundError: org / dbunit / database / IDatabaseConnection" - PullRequest
1 голос
/ 07 декабря 2010

У меня есть следующий код 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, и я поместил файлы dbunit-2.4.8.jar и jtds-1.2.5.jar в ту же папку, что и export.java и export.class;и я компилирую export.java со следующим cmd:

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

Есть идеи, что я делаю неправильно?

Ответы [ 4 ]

5 голосов
/ 19 мая 2012

У меня была эта проблема, но я использовал maven (m2eclipse) и запустил его изнутри Eclipse.Моя проблема была исправлена, когда я удалил scope = test из зависимости dbunit.

Я также попытался запустить из консоли, используя javac и java, как вы, но получил ту же ошибку.Это должно быть из-за некоторых зависимостей, которые мы забыли включить в путь к классам.Для компиляции нам нужен только dbunit.jar, но классы dbunit зависят от других вещей, которые на самом деле выполняются, поэтому нам нужно помещать другие jar-файлы в classpath при запуске (например, slf4j).

При успешном запуске изнутриEclispe, вот мои зависимости: slf4j-api-1.6.1.jar slf4j-log4j12-1.6.1.jar log4j-1.2.16.jar ojdbc6-11.1.0.6.0.jar (с использованием oracle) dbunit-2.4.8.jar junit-3.8.2.jar commons-collection-3.2.1.jar

Попробуйте поместить их все в путь к классам и посмотрите, работает ли он.

О сообщении об ошибке ..Несмотря на то, что там написано «Не удалось найти основной класс: экспорт.Программа выйдет. ', Это не совсем так.Он находит основной класс, и я мог отлаживать выполнение после того, как закомментировал все строки после второго.Проблема возникает только в том случае, если я импортирую org.dbunit.database.DatabaseConnection.Я считаю, что когда этот класс импортируется, основной класс пытается загрузить DatabaseConnection, который пытается загрузить что-то, чего нет в пути к классам.Таким образом, Java дает ложное сообщение об ошибке.

1 голос
/ 27 марта 2012

Я использую это в базе данных оракула, и она отлично работает ^^

IDatabaseConnection connection = new DatabaseConnection(jdbcConnection, "SCHEMA_OF_YOUR_DB");
0 голосов
/ 07 декабря 2010

Вам необходимо включить параметр -cp при запуске командной строки java. Вот так:

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

0 голосов
/ 07 декабря 2010

Ваша трассировка стека заканчивается на

"Не удалось найти основной класс: экспорт. Программа завершит работу."

Это говорит мне, что во время выполнения «export» не находится в вашем пути к классам. Ваш classpath должен включать 'export.class'. Тот факт, что он находится в той же папке, что и файлы JAR, не означает, что он автоматически находится в пути к классам.

...