使用DBunit导出数据库"java.lang.NoClassDefFoundError:org/dbunit/database/IDatabaseConnection"时出错

eri*_*old 1 java dbunit export jtds jdbc

我有以下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"));
    }
}
Run Code Online (Sandbox Code Playgroud)

错误:

$ java导出

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.
Run Code Online (Sandbox Code Playgroud)

java文件被编译的名字是export.java和编译的文件的名称是export.class的,我已经把dbunit-2.4.8.jarjtds-1.2.5.jar文件到同一文件夹中export.javaexport.class; 我正在使用以下cmd编译export.java:

$ javac -cp "dbunit-2.4.8.jar;jtds-1.2.5.jar" export.java
Run Code Online (Sandbox Code Playgroud)

知道我做错了什么吗?

Bru*_*JCM 5

我有这个问题,但使用maven(m2eclipse)并从Eclipse内部运行它.当我从dbunit依赖项中删除scope = test时,我的问题得到解决.

我也尝试从控制台运行,使用javac和java,就像你一样,但是得到了同样的错误.它一定是因为我们忘记包含在类路径中的某些依赖项.我们只需要dbunit.jar来编译,但dbunit类依赖于实际运行的其他东西,因此我们需要在运行时将其他jar放在类路径上(例如,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-collections-3.2.1.jar

尝试将它们全部放在类路径上,看看它是否有效.

关于错误消息..尽管它说"无法找到主类:导出.程序将退出.',这不是真的.它确实找到了主类,并且在我在第二行之后注释掉所有行之后我可以调试执行.只有在我导入org.dbunit.database.DatabaseConnection时,问题才会出现.我相信,当导入这个类时,主类会尝试加载DatabaseConnection,它试图加载不在类路径中的东西.所以java给出了误导性的错误信息.