Плагин java-test-fixtures не работает с платформой dgs
Я пытался использовать плагин java-test-fixtures в проекте с платформой dgs, но, похоже, он не работает. Он работал с версией 5.5.3 (весенняя загрузка 2.7) платформы dgs, но с версии 6 (весенняя загрузка 3) нет.
У меня есть простой проект весенней загрузки с фреймворком dgs. Я пытаюсь запустить пустой тест, но он выдает исключение с сообщением:
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'dgsQueryExecutor' defined in class path resource [com/netflix/graphql/dgs/autoconfig/DgsAutoConfiguration.class]: Unsatisfied dependency expressed through method 'dgsQueryExecutor' parameter 1: Error creating bean with name 'schema' defined in class path resource [com/netflix/graphql/dgs/autoconfig/DgsAutoConfiguration.class]: Failed to instantiate [graphql.schema.GraphQLSchema]: Factory method 'schema' threw exception with message: errors=['SomeEntity' type [@1:1] tried to redefine existing 'SomeEntity' type [@1:1]]
Мой простой проект: https://github.com/tomsvet/dgs_demo
Мой файл build.gradle.kts выглядит:
plugins {
id("org.springframework.boot") version "3.1.0" apply false
id("io.spring.dependency-management") version "1.1.0"
id("com.netflix.dgs.codegen") version "5.11.1" apply false
kotlin("jvm") version "1.8.21"
kotlin("plugin.spring") version "1.8.21"
id("java-test-fixtures")
}
group = "com.dgs.demo"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_17
repositories {
mavenCentral()
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
implementation("org.jetbrains.kotlin:kotlin-reflect")
implementation(platform("com.netflix.graphql.dgs:graphql-dgs-platform-dependencies:latest.release"))
implementation("com.netflix.graphql.dgs:graphql-dgs-spring-boot-starter")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}
Я исследую, что эта ошибка возвращается только тогда, когда я использовал
Решение:
Что я обнаружил: при использовании плагина тестовых приспособлений Java Gradle 6 изменил способ добавления производственного исходного кода (основной исходный набор) в путь к классам при компиляции или запуске тестов. Теперь он использует файл jar вместо выходного каталога компиляции (build/classes/java/main). Решение состоит в том, чтобы удалить файлы jar из пути к классам:
tasks.withType<Test>{
val ignoredJarNames = files(tasks.jar).map { it.name }
classpath = classpath.filter { cpItem -> !ignoredJarNames.contains(cpItem.name)
}
или
tasks.withType<Test>{classpath -= files(tasks.jar)}
Дополнительная информация: https://github.com/gradle/gradle/issues/11696 .