【问题标题】:Trying to resolve ClassNotFound error when running program using OrmLite使用 OrmLite 运行程序时尝试解决 ClassNotFound 错误
【发布时间】:2021-12-16 15:23:14
【问题描述】:

我正在尝试使用 OrmLite 连接到 SQLite 数据库(不是 android)。我已阅读文档,并且我相信我的代码是正确的,但是在尝试运行时出现运行时错误。我正在使用 Maven 导入依赖项。

这是我的代码:

public class AddressBook {
    public static void main(String[] args) throws SQLException {
        ConnectionSource connectionSource =
            new JdbcConnectionSource("jdbc:sqlite:database.db");
        Dao<Person, Integer> personDao =
            DaoManager.createDao(connectionSource, Person.class);
        ...
    }
}

这是我的 maven POM 文件的依赖部分:

  <dependencies>
        
        <!-- https://mvnrepository.com/artifact/org.xerial/sqlite-jdbc -->
        <dependency>
            <groupId>org.xerial</groupId>
            <artifactId>sqlite-jdbc</artifactId>
            <version>3.36.0.3</version>
        </dependency>
        
        <!-- https://mvnrepository.com/artifact/com.j256.ormlite/ormlite-core -->
        <dependency>
            <groupId>com.j256.ormlite</groupId>
            <artifactId>ormlite-core</artifactId>
            <version>4.48</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.j256.ormlite/ormlite-jdbc -->
        <dependency>
            <groupId>com.j256.ormlite</groupId>
            <artifactId>ormlite-jdbc</artifactId>
            <version>5.6</version>
        </dependency>
    </dependencies>

我正在尝试在 Eclipse 中运行该程序。我检查了运行配置,它在依赖项选项卡的类路径中显示了 Maven 依赖项。这是我在 Eclipse 中运行时遇到的错误:

Exception in thread "main" java.lang.NoClassDefFoundError: com/j256/ormlite/field/converter/BooleanNumberFieldConverter
    at com.j256.ormlite.jdbc.db.SqlServerDatabaseType.<clinit>(SqlServerDatabaseType.java:31)
    at com.j256.ormlite.jdbc.db.DatabaseTypeUtils.<clinit>(DatabaseTypeUtils.java:31)
    at com.j256.ormlite.jdbc.BaseJdbcConnectionSource.initialize(BaseJdbcConnectionSource.java:102)
    at com.j256.ormlite.jdbc.JdbcConnectionSource.<init>(JdbcConnectionSource.java:104)
    at com.j256.ormlite.jdbc.JdbcConnectionSource.<init>(JdbcConnectionSource.java:47)
    at dev.website.addressbook.AddressBook.main(AddressBook.java:19)
Caused by: java.lang.ClassNotFoundException: com.j256.ormlite.field.converter.BooleanNumberFieldConverter
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
    ... 6 more

有什么想法吗?

【问题讨论】:

  • 这不是编译器错误,而且您没有显示您是如何尝试启动应用程序的。
  • 你说得对@chrylis-cautiouslyoptimistic-我更新了我的问题,抱歉我是Java新手。我只是想在 Eclipse 中运行它。我确实检查了运行配置,它显示了 Maven 依赖项。我不确定我是否可能错过了那里的一步。

标签: java sqlite jdbc ormlite


【解决方案1】:

Exception in thread "main" java.lang.NoClassDefFoundError 通常在您有 Class A 尝试访问 Class B 并且 Class Bclasspath 中不可用时发生。简单地说,在Class A 你有:

import com.company.ClassB;

class A {

}

然后在Class Bjar 中,Class B 那里不再可用。

在您的情况下,ormlite-coreormlite-jdbc 之间的版本不兼容。 ormlite-jdbc 中的 SqlServerDatabaseType 类正在寻找 ormlite-core 中的 BooleanNumberFieldConverter 类,这在 ormlite-core 的版本 4.48 中不再可用。

要解决您的问题,您必须将ormlite-core 的版本更改为5.6

<dependency>
    <groupId>com.j256.ormlite</groupId>
    <artifactId>ormlite-core</artifactId>
    <version>5.6</version>
 </dependency>

 <dependency>
    <groupId>com.j256.ormlite</groupId>
    <artifactId>ormlite-jdbc</artifactId>
    <version>5.6</version>
 </dependency>

【讨论】:

  • 感谢您的详细解释。它真的帮助了我!我接受了你的回答。
【解决方案2】:

我刚刚想通了。

当我导入 ormlite-core 和 ormlite-jdbc 时,我导入了它们的不同版本。我在我的 maven POM 中将其更改为相同的版本,并纠正了问题!

这就是我将 maven POM 依赖项更改为:

<dependencies>
        
        <!-- https://mvnrepository.com/artifact/org.xerial/sqlite-jdbc -->
        <dependency>
            <groupId>org.xerial</groupId>
            <artifactId>sqlite-jdbc</artifactId>
            <version>3.36.0.3</version>
        </dependency>
        
        <!-- https://mvnrepository.com/artifact/com.j256.ormlite/ormlite-core -->
        <dependency>
            <groupId>com.j256.ormlite</groupId>
            <artifactId>ormlite-core</artifactId>
            <version>5.6</version>
        </dependency>


        <!-- https://mvnrepository.com/artifact/com.j256.ormlite/ormlite-jdbc -->
        <dependency>
            <groupId>com.j256.ormlite</groupId>
            <artifactId>ormlite-jdbc</artifactId>
            <version>5.6</version>
        </dependency>
    </dependencies>

【讨论】:

    猜你喜欢
    • 2023-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 2023-04-05
    相关资源
    最近更新 更多