java - 如何将 javax.persistence.criteria.* 类添加到 Quarkus 中的 Jandex 索引?

标签 java gradle kotlin quarkus

我正在尝试修复 Quarkus 应用程序中的以下警告:

2019-11-17 16:21:34,191 INFO  [io.qua.dep.QuarkusAugmentor] (main) Beginning quarkus augmentation
2019-11-17 16:21:34,975 WARN  [io.qua.dep.ste.ReflectiveHierarchyStep] (build-11) Unable to properly register the hierarchy of the following classes for reflection as they are not in the Jandex index:
        - javax.persistence.criteria.CriteriaBuilder
        - javax.persistence.criteria.Predicate
        - javax.persistence.criteria.Root
        - kotlin.jvm.functions.Function3
Consider adding them to the index either by creating a Jandex index for your dependency via the Maven plugin, an empty META-INF/beans.xml or quarkus.index-dependency properties.");.

我正在使用 gradle,并且只有一个模块,没有子模块。 这是我的 build.gradle:

buildscript {
    ext {
        kotlinVersion = '1.3.50'
        quarkusVersion = '1.0.0.CR1'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "io.quarkus:quarkus-gradle-plugin:${quarkusVersion}"
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}")
        classpath("org.jetbrains.kotlin:kotlin-allopen:${kotlinVersion}")
        classpath("org.jetbrains.kotlin:kotlin-noarg:${kotlinVersion}")
    }
}

plugins {
    id 'io.quarkus' version '1.0.0.CR1'
}

apply plugin: 'kotlin'
apply plugin: 'kotlin-jpa'

group = 'com.mkleimann'
version = '0.0.3-SNAPSHOT'

repositories {
    mavenCentral()
}

quarkus {
    setSourceDir("src/main/kotlin")
    setOutputDirectory("build/classes/kotlin/main")

    buildNative {
        setAdditionalBuildArgs(["-H:EnableURLProtocols=http"])
    }
}


compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

test {
    useJUnitPlatform()
}

dependencies {
    implementation group: 'org.jetbrains.kotlin', name: 'kotlin-stdlib-jdk8', version: "${kotlinVersion}"

    implementation enforcedPlatform("io.quarkus:quarkus-bom:${quarkusVersion}")
    implementation "io.quarkus:quarkus-kotlin:${quarkusVersion}"
    implementation "io.quarkus:quarkus-resteasy-jackson:${quarkusVersion})"
    implementation "io.quarkus:quarkus-undertow:${quarkusVersion})"
    implementation "io.quarkus:quarkus-jdbc-postgresql:${quarkusVersion}"
    implementation "io.quarkus:quarkus-hibernate-orm-panache:${quarkusVersion}"
    implementation "io.quarkus:quarkus-oidc:${quarkusVersion}"

    implementation 'com.aventrix.jnanoid:jnanoid:2.0.0'
    implementation group: 'org.jboss.resteasy', name: 'resteasy-multipart-provider', version: '4.2.0.Final'
    implementation group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-jsr310', version: '2.10.0'
    implementation group: 'com.fasterxml.jackson.module', name: 'jackson-modules-java8', version: '2.10.0', ext: 'pom'

    testCompile group: 'io.quarkus', name: 'quarkus-junit5', version: "${quarkusVersion}"
    testCompile(group: 'io.rest-assured', name: 'rest-assured', version: '3.3.0') {
        exclude(module: 'activation')
        exclude(module: 'jaxb-osgi')
    }
}

由于我使用gradle,所以无法使用maven jandex插件。我还尝试添加一个空的 beans.xml 但我仍然收到相同的警告。

对于使用 application.properties 的第三个选项,我不知道该放什么,因为这些只是 JPA 类(和 kotlin 的东西)。

此外,我不会直接在代码中注入(inject)任何这些类,因此我不确定此警告来自何处。

将这些类添加到 Jandex 索引的正确方法是什么?

最佳答案

我认为尝试理解为什么需要这些类是一个更好的主意。

如果您可以从代码中提取重现器,您可以打开 GitHub 问题吗?我很想看看哪些模式导致需要这些类。

我们可能需要稍微调整一下规则。

关于java - 如何将 javax.persistence.criteria.* 类添加到 Quarkus 中的 Jandex 索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58902190/

相关文章:

java - ElasticSearch单节点集群内存不足

java - Spring Reactive MVC 与 @EnableAsync

java - 帮助使用正则表达式

android - 任何处理器都无法识别 Kapt 选项

gradle - Gradle构建未调用JUnit

jenkins - 如何查看Gradle在Jenkins中生成的HTML报告

kotlin - 网络调用后,如何将数据从 Android 库传递到我的应用程序?

javascript - 如何在 Kotlin 的 JS 接口(interface)中使用可选参数调用

android - google map android - 无法从 BitmapDescriptorFactory.fromAsset 设置 map 图标

java - 获取特定文档而不浏览所有实例