繁体   English   中英

JDBi 声明式样式 - class 未找到

[英]JDBi Declarative style - class not found

我正在尝试使用 JDBI 的声明式样式从表中获取数据。 它因 NoClassDefFoundError 而失败。

当我尝试在 JDBI 中使用 Fluet 风格时,它工作正常。

POM.xml

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
            <version>3.0.1</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>


        <dependency>
            <groupId>org.jdbi</groupId>
            <artifactId>jdbi3-core</artifactId>
            <version>3.19.0</version>
        </dependency>
        <dependency>
            <groupId>org.jdbi</groupId>
            <artifactId>jdbi3-sqlobject</artifactId>
            <version>3.35.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.derby</groupId>
            <artifactId>derby</artifactId>
            <version>10.13.1.1</version>
        </dependency>

        <dependency>
            <groupId>org.apache.derby</groupId>
            <artifactId>derbyclient</artifactId>
            <version>10.13.1.1</version>
        </dependency>

注册了 SqlObject 插件

    @Bean
    public Jdbi jdbi(DataSource ds, List<JdbiPlugin> jdbiPlugins, List<RowMapper<?>> rowMappers) {
        TransactionAwareDataSourceProxy proxy = new TransactionAwareDataSourceProxy(ds);
//        Jdbi jdbi = Jdbi.create("jdbc:derby:memory:local");
        Jdbi jdbi = Jdbi.create(ds);
        jdbi.installPlugin(new SqlObjectPlugin());

        return jdbi;
    }

DOA

public interface FolioDao {

    @SqlQuery("select * from FOLIO")
    @UseRowMapper(FolioMapper.class)
    List<Folio> findAll();

}

服务

public Iterable<Folio> getAllFolio(Jdbi jdbi) {

        return jdbi.withExtension(FolioDao.class, dao -> dao.findAll());

    }

错误

java.lang.ClassNotFoundException: org.jdbi.v3.core.extension.ExtensionContext
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na]
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na]
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[na:na]
    at org.jdbi.v3.sqlobject.internal.SqlObjectInitData.lambda$lazyInvoker$0(SqlObjectInitData.java:129) ~[jdbi3-sqlobject-3.35.0.jar:3.35.0]
    at org.jdbi.v3.core.internal.MemoizingSupplier.init(MemoizingSupplier.java:42) ~[jdbi3-core-3.19.0.jar:3.19.0]
    at org.jdbi.v3.core.internal.MemoizingSupplier.get(MemoizingSupplier.java:36) ~[jdbi3-core-3.19.0.jar:3.19.0]
    at org.jdbi.v3.sqlobject.SqlObjectFactory.lambda$attach$2(SqlObjectFactory.java:107) ~[jdbi3-sqlobject-3.35.0.jar:3.35.0]
    at jdk.proxy2/jdk.proxy2.$Proxy67.findAll(Unknown Source) ~[na:na]
    at com.chakra.projects.investment.service.funds.FundManagerSvc.lambda$getAllFolio$0(FundManagerSvc.java:28) ~[classes/:na]
    at org.jdbi.v3.core.Jdbi.callWithExtension(Jdbi.java:476) ~[jdbi3-core-3.19.0.jar:3.19.0]
    at org.jdbi.v3.core.Jdbi.withExtension(Jdbi.java:463) ~[jdbi3-core-3.19.0.jar:3.19.0]
    at com.chakra.projects.investment.service.funds.FundManagerSvc.getAllFolio(FundManagerSvc.java:28) ~[classes/:na]
    at com.chakra.projects.investment.controllers.FundManagerController.getAll(FundManagerController.java:29) ~[classes/:na]
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:578) ~[na:na]

我不确定我错过了什么。 关于如何继续调试此问题的任何指示?

提前致谢。

更改jdbi3-corejdbi3-sqlobject的 Jdbi POM 依赖项,以便它们使用相同的版本。

当前,您拥有 Jdbi Core 的 3.19.0 版本 - 它不包含org.jdbi.v3.core.extension.ExtensionContext

然而,class确实存在于 Jdbi Core 版本 3.35.0 中。


如果您从 POM 中删除jdbi3-core依赖项并只保留jdbi3-sqlobject依赖项,那么 Maven 将自动为您引入正确的jdbi3-core依赖项(它是一个传递依赖项)。 该版本的jdbi3-core将匹配jdbi3-sqlobject的版本。

您可以在相关的Maven 中央清单中看到这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM