【发布时间】:2020-02-14 13:47:18
【问题描述】:
我正在尝试将 import.sql 从资源添加到类路径,以便它由休眠加载,并且在应用程序启动时将一些测试数据导入数据库。
我正在使用带有以下插件的 kotlin 和 gradle:
- jvm
- plugin.spring
- plugin.jpa
- org.springframework.boot
- io.spring.dependency-management
从 IntelliJ 运行应用程序(bootRun 任务)时,资源位于 build/resources/main,java 类位于 build/classes/java/main。因此,当休眠尝试加载 import.sql 时找不到它,因为 java 类路径位于 build/classes/java/main 中(尝试运行 getResources("") 并返回该文件夹)。生成的文件夹结构、application.properties 和 gradle build 可以在下面找到。
application.properties
logging.level.org.hibernate.*=TRACE
logging.level.org.hibernate.SQL=trace
spring.datasource.data=classpath://import.sql
spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true
spring.h2.console.path=/console
build.gradle.kts
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
val kotlinVersion = "1.3.50"
val springBootVersion = "2.1.9.RELEASE"
val h2Version = "1.4.200"
val hibernateVersion = "5.4.6.Final"
val snippetsDir = "./build/generated-snippets"
val test = "./gradle/test"
group = "org.testkotlin"
version = "0.0.1-SNAPSHOT"
java{
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
configurations {
compileOnly {
extendsFrom(configurations.annotationProcessor.get())
}
}
repositories {
gradlePluginPortal()
mavenCentral()
}
extra["snippetsDir"] = file(snippetsDir)
plugins {
idea
kotlin("jvm") version "1.3.50"
kotlin("plugin.spring") version "1.3.50"
kotlin("plugin.jpa") version "1.3.50"
id("org.springframework.boot") version "2.1.9.RELEASE"
id("io.spring.dependency-management") version "1.0.8.RELEASE"
id("org.asciidoctor.convert") version "1.5.8"
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-actuator")
implementation("org.springframework.boot:spring-boot-starter-data-rest")
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
implementation("org.jetbrains.kotlin:kotlin-reflect")
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
implementation("org.hibernate:hibernate-core:$hibernateVersion")
runtimeOnly("com.h2database:h2:$h2Version")
annotationProcessor("org.springframework.boot:spring-boot-configuration-processor")
testImplementation("org.springframework.boot:spring-boot-starter-test")
testImplementation("org.springframework.restdocs:spring-restdocs-mockmvc")
}
tasks.withType<KotlinCompile> {
kotlinOptions {
jvmTarget = "1.8"
}
}
tasks.test {
outputs.dir(snippetsDir)
}
tasks.asciidoctor {
inputs.dir(snippetsDir)
dependsOn(test)
}
tasks.bootRun {
doFirst {
classpath = files("$buildDir/classes/main", "$buildDir/resources/main")
}
}
所以我的问题是:
- 如何向类路径添加资源?
- 是否可以修改
bootRun任务来执行此操作(doFirst 不是一个选项,因为任务依赖于预先不存在的classes/java)? -
bootRun或 gradle build 中是否有一些属性可以启用此功能? - 最终我怎样才能让休眠自动识别
import.sql,而无需手动将其移动到build/classes/java/main?
【问题讨论】:
标签: java hibernate spring-boot gradle kotlin