我已经看过以下主题,但是他们没有针对我的问题发布解决方案:

  • java.lang.ClassNotFoundException: org.apache.derby.jdbc.EmbeddedDriver
  • JDBC Derby driver not found
  • SQLException: No suitable driver found for jdbc:derby://localhost:1527
  • Class [org.apache.derby.jdbc.ClientDriver] not found Exception
  • Class [org.apache.derby.jdbc.ClientDriver] not found. When trying to connect to db
  • ClassNotFoundException: org.apache.derby.jdbc.EmbeddedDriver when trying to use JPA with Derby

  • 你好。
    在我的项目中,我正在使用 Maven ,并且我还想在嵌入式模式下使用 Derby Database 。因此,我通过以下方式更新了pom.xml文件:
    <dependencies>
        ...
        <dependency>
            <groupId>org.apache.derby</groupId>
            <artifactId>derby</artifactId>
            <version>10.12.1.1</version>
        </dependency>
    </dependencies>
    

    Maven成功下载了依赖项。它在Eclipse的BuildPath中的Maven Dependencies下以derby-10.12.1.1.jar可见。
    然后我创建了测试类:
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import org.apache.derby.jdbc.EmbeddedDriver;
    
    public class DerbyTest {
        public static void main (String...strings){
             try {
                 DriverManager.registerDriver(new EmbeddedDriver());
                Connection conn = DriverManager.getConnection("jdbc:derby:test2;create=true");
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    

    这给了我以下ClassNotFoundException
    Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/derby/jdbc/EmbeddedDriver
        at DerbyTest.main(DerbyTest.java:10)
    Caused by: java.lang.ClassNotFoundException: org.apache.derby.jdbc.EmbeddedDriver
        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
    

    问题是-为什么? 该类在构建路径中。 Eclipse没有给我任何编译时错误警告-它在编写过程中看到了该类。依赖项的范围是可编译的。 JVM查找类应该没有问题。另外,JVM对我正在使用的其他依赖项(jTest,Hibernate,SQLite)没有任何问题。

    Scriptum之后:我试图解决这个难题:
  • 我使用与上述相同的测试类创建了新项目。然后,我从https://db.apache.org/derby/releases/release-10.12.1.1.cgi(bin版本)手动下载了Derby,并将derby.jar手动添加到了新项目的构建路径中。运行程序后,成功创建了数据库
  • 然后,我创建了另一个新项目2 ,该项目具有与以前相同的测试类。我在本地存储库(在C:\Users\User\.m2\repository\org\apache\derby\derby\10.12.1.1中)找到了Maven的Debry版本,并手动将derby-10.12.1.1.jar添加到了新项目的构建路径。运行程序后,我得到的与使用Maven时的错误完全相同。
  • 我使用手动下载的Derby(从第1点开始),并通过在我的主项目中编辑pom.xml文件来创建外部存储库:


  • <repositories>
        <repository>
            <id>derby-repo</id>
            <url>file://C:/libs</url>
        </repository>
    </repositories>
    
    <dependencies>
        ...
        <dependency>
            <groupId>derbygroupid</groupId>
            <artifactId>derby</artifactId>
            <version>0.0.1</version>
        </dependency>
    </dependencies>
    

    Maven成功在Eclipse的BuildPath中的Maven依赖项下将依赖项添加为derby-0.0.1.jar。运行程序后,成功创建了数据库
    这通常可以解决问题,但是问题是,为什么 Maven无法依靠自己的来处理它?

    编辑:对于那些有兴趣的人。我已经通过使用较旧版本的derby暂时解决了问题:
    <dependencies>
        ...
        <dependency>
            <groupId>org.apache.derby</groupId>
            <artifactId>derby</artifactId>
            <version>10.11.1.1</version>
        </dependency>
    </dependencies>
    

    这个版本有效,但是我仍然不知道为什么10.12.1.1没有

    最佳答案

    我面临着同样的问题,但我克服了它...

    自从我从事intellij工作以来,我去了

    文件->项目结构->模块->依赖关系

    单击加号,然后选择“JAR和依赖项”

    打开jdk的路径,并从其中添加以下jar文件
    1. derby.jar
    2. derbyclient.jar
    3. derbynet.jar
    4. derbytools.jar
    5. derby.jar

    单击“应用”。有效!

    对于Eclipse,请尝试this

    关于java - 使用Maven时,Derby给出了ClassNotFoundException : org. apache.derby.jdbc.EmbeddedDriver,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39269935/

    10-11 22:20
    查看更多