Tyv*_*rel 8 java derby noclassdeffounderror maven classnotfoundexception
我看过以下主题,但他们没有发布我的问题的解决方案:
你好。
在我的项目中,我使用Maven,我还想在嵌入式模式下使用Derby 数据库。因此,我通过以下方式更新了pom.xml文件:
<dependencies>
...
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derby</artifactId>
<version>10.12.1.1</version>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
Maven 成功下载了依赖项。它在Maven 依赖项下的 Eclipse BuildPath中可见,为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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这给了我以下 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
Run Code Online (Sandbox Code Playgroud)
问题是——为什么?该类位于构建路径中。Eclipse 没有给我任何编译时错误警告——它在编写过程中看到了这个类。依赖的范围是编译。JVM 在查找类时应该没有问题。此外,JVM 对我使用的其他依赖项(jTest、Hibernate、SQLite)没有问题。
Post Scriptum:我试图解决这个难题:
我使用与上面相同的测试类创建了新项目。然后我从https://db.apache.org/derby/releases/release-10.12.1.1.cgi(bin版)手动下载了Derby,并手动将derby.jar添加到新项目的构建路径中。运行程序后,成功创建了数据库。
然后我使用与以前相同的测试类创建了另一个新项目 2。我在我的本地存储库中找到了 Maven 的 Debry 版本(在C:\Users\User\.m2\repository\org\apache\derby\derby\10.12.1.1 中)并手动将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>
Run Code Online (Sandbox Code Playgroud)
Maven 成功地在Maven Dependencies下的 Eclipse BuildPath 中添加了一个依赖项作为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>
Run Code Online (Sandbox Code Playgroud)
这个版本有效,但我仍然不知道为什么 10.12.1.1 没有
| 归档时间: |
|
| 查看次数: |
5584 次 |
| 最近记录: |