我的 build.gradle.kts
中有以下 gradle 任务。它应该从我的 JPA 实体生成文件。但是运行此任务时,成功后,没有生成文件或目录。
task(name = "generateJooq") {
doLast {
val configuration = Configuration().apply {
generator = Generator().apply {
database = Database().apply {
name = "org.jooq.util.jpa.JPADatabase"
properties = listOf(Property().apply {
key = "packages"
value = "com.example.sample"
})
}
target = Target().apply {
packageName = "com.example.jooq"
directory = "src/generated/java"
}
}
}
GenerationTool.generate(configuration)
}
}
这是我在包 com.example.sample
下的实体。请注意,我用 Java 编写了这个实体。
@Entity
public class Book {
@Id
private String id;
@Column
private String title;
}
有以下日志
./gradlew clean generateJooq
BUILD SUCCESSFUL in 1s
2 actionable tasks: 2 executed
最佳答案
我猜你的 Book
类在 src/main/java
中,对吗?
现在您希望该类对 JOOQ
可用,对吗?在编译 src/main/java
之前定义 Gradle buildscript 类加载器(加载 gradle 任务),这有点先有鸡还是先有蛋的问题。
您需要将自定义类加载器传递给 JOOQ
(例如 URLClassloader)。 JOOQ
然后可以使用类加载器加载类(希望 JOOQ
API 支持这一点)。您可以使用 sourceSets.main.runtimeClasspath
创建一个 URL
数组。
我看到 GenerationTool
有一个 setClassLoader(..)
方法 here .我猜你会这样称呼
参见 here对于类似的解决方案(使用 Reflections
而不是 JOOQ
但基本相同)。
关于java - JOOQ with Gradle 和 Kotlin 不生成文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45994293/