Как вытащить правильную версию JOOQ с помощью Spring Boot и Gradle? - PullRequest
0 голосов
/ 19 марта 2019

Итак, согласно плагину gradle jooq readme:

Определение версии jOOQ при использовании загрузочного плагина Spring При применении spring-boot-gradle-plugin недостаточно объявить версию jOOQ, которую вы хотите добавить через jooq.version = '3.11.9', поскольку правила управления зависимостями spring-boot-gradle-plugin имеют приоритет. Вы также должны установить ext['jooq.version'] = '3.11.9', чтобы получить запрашиваемую версию jOOQ.

Я написал небольшой тест на соединение с БД книги H2 (см. В конце этого поста) и поместил ext['jooq.version'] = '3.11.10' в свой файл Gradle (см. Ниже).

Это приводит к предупреждению, что

Не удается разрешить доступ к индексу с помощью аргументов (java.lang.String, java.lang.String)

И в конечном итоге ничего не делает, потому что когда я запускаю тест, я все равно получаю

Спасибо за использование jOOQ 3.11.9

Как мне это исправить?

build.gradle

plugins {
    id 'org.springframework.boot' version '2.1.3.RELEASE'
    id 'java'

    id 'nu.studer.jooq' version '3.0.3'
}

apply plugin: 'io.spring.dependency-management'

group = 'ch.cypherk'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

repositories {
    mavenCentral()
}

dependencies {
    //web
    implementation 'org.springframework.boot:spring-boot-starter-web'

    //database
    runtime 'com.h2database:h2'
    implementation 'org.springframework.boot:spring-boot-starter-jdbc'

    //jooq
    implementation 'org.springframework.boot:spring-boot-starter-jooq'
    implementation 'org.jooq:jooq'
    jooqRuntime 'com.h2database:h2:1.4.199'

    //test
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

ext['jooq.version'] = '3.11.10' //required in the presence of the spring boot plugin
jooq{
    version = '3.11.10'
    edition = 'OSS'
    h2(sourceSets.main){
        jdbc{
            driver = 'org.h2.Driver'
            url = 'jdbc:h2:file:~/test;AUTO_SERVER=TRUE'
            user = 'sa'
            password = ''
        }
        generator {
            name = 'org.jooq.codegen.DefaultGenerator'
            database {
                name = 'org.jooq.meta.h2.H2Database'
                includes = '.*'
                excludes = ''
            }
            target {
                packageName = 'ch.cypherk.bookdb'
                directory = 'src/main/gen'
            }
        }
    }
}

И тест ...

package ch.cypherk.bookdb;

import org.jooq.*;
import org.jooq.impl.DSL;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.sql.Connection;
import java.sql.DriverManager;

import static ch.cypherk.bookdb.public_.Tables.BOOK;
import static org.hamcrest.Matchers.*;
import static org.hamcrest.MatcherAssert.*;

@RunWith(SpringRunner.class)
@SpringBootTest
public class JooqTests {
    @Value("${spring.datasource.url}")
    private String url;

    @Value("${spring.datasource.driver-class-name}")
    private String driverClassName;

    @Value("${spring.datasource.username}")
    private String username;

    @Value("${spring.datasource.password}")
    private String password;

    private DSLContext create;

    @Before
    public void openDatabaseConnection(){
        Connection conn;
        try {
            conn = DriverManager.getConnection(url,username,password);
        }catch(Exception e){
            throw new AssertionError(e);
        }

        create = DSL.using(conn, SQLDialect.H2);
    }

    @After
    public void closeDatabaseConnection(){
        create.close();
    }

    @Test
    public void CLRS_is_in_DB(){
        //given
        SelectJoinStep<Record> query = create.select().from(BOOK);

        //when
        Result<Record> result = query.fetch();

        //then
        assertThat(result.stream().anyMatch(r -> r.getValue(BOOK.TITLE).equals("Introduction to Algorithms")), is(true));
    }
}
...