Estou criando um iniciador personalizado e desejo adicionar um aplicativo de amostra que demonstrará a configuração automática e testá-lo-á. Mas parece que o Gradle não tem conhecimento de META-INF/spring.factories
quando eu executo ./gradlew test
no console.
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'javax.sql.DataSource' available: expected at least 1 bean which qualifies as autowire candidate.
Este é o meu build.gradle
exemplo de aplicativo, é um módulo em um projeto de vários módulos:
plugins {
id 'org.jetbrains.kotlin.jvm'
id 'org.jetbrains.kotlin.plugin.spring'
id 'org.jetbrains.kotlin.plugin.jpa'
id 'org.springframework.boot'
id 'io.spring.dependency-management'
}
dependencies {
implementation project(':custom-spring-boot-starter')
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation "org.flywaydb:flyway-core:5.2.4"
implementation 'com.h2database:h2:1.4.197'
// Test
testImplementation "org.springframework.boot:spring-boot-starter-test"
testImplementation 'org.springframework.boot:spring-boot-test-autoconfigure:2.1.7.RELEASE'
testImplementation "org.hamcrest:hamcrest:2.1"
testImplementation "org.testng:testng:6.14.3"
testImplementation "com.github.javafaker:javafaker:0.17.2"
testImplementation "org.awaitility:awaitility:3.0.0"
}
test {
useTestNG()
jacoco {
destinationFile = file("$rootDir/build/jacoco/test.exec")
}
}
É um aplicativo simples do Spring Boot:
@SpringBootApplication
class Application
fun main(args: Array<String>) {
SpringApplication.run(Application::class.java, *args)
}
E eu configuro a classe base para todos os testes de contexto como este:
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
abstract class ApplicationTest : AbstractTestNGSpringContextTests() {
@Autowired
lateinit var restTemplate: TestRestTemplate
@LocalServerPort
private var port: Int = 0
fun getRequest(uri: String, responseType: Class<*>) =
restTemplate.getForEntity("http://localhost:$port$uri", responseType)
}
Portanto, o que devo fazer para aplicar a configuração automática personalizada na execução do comando Gradle?
Dê uma olhada no projeto multi-módulo de boot do Spring no guia oficial do Spring aqui (código-fonte aqui ), onde eles usaram uma tarefa jar customizada (módulo "biblioteca"). Se você executar " gradle build
", o artefato resultante estará na module --> libs
pasta da biblioteca . Esta é a biblioteca de boot do Spring sem classe principal. O outro módulo ("aplicativo") é obviamente o aplicativo principal que usa uma bootJar
tarefa " " personalizada simples . Ambos os módulos contêm testes.
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras