生成代码
代码生成
和JPA2.0 Criteria、QueryDsl、Fluent MyBatis等框架类似,Jimmer是让开发人员使用强类型DSL进行开发,尽可能在编译时发现开发人员犯的错误,而非运行时。
因此,编译时需要根据用户编写的实体类型,生成一些代码。
- Java用户使用Annotation Processor
- Kotlin用户使用KSP
你既可以使用Jimmer标准的构建方式,也可以采用社区提供的插件
-
用法一:使用Jimmer标准的构建方式
- Java(Maven)
- Java(Gradle)
- Kotlin(Gradle.kts)
pom.xml...省略其他代码...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.10.1</version>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>org.babyfish.jimmer</groupId>
<artifactId>jimmer-apt</artifactId>
<version>${jimmer.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>
...省略其他代码...build.gradledependencies {
...省略其他依赖...
annotationProcessor "org.babyfish.jimmer:jimmer-apt:${jimmerVersion}"
}对于 Kotlin/JVM 项目,请使用与项目 Kotlin 版本兼容的 KSP2 版本。 在定义实体或 DTO 文件的每个模块中添加以下配置:
build.gradle.ktsimport com.google.devtools.ksp.gradle.KspAATask
plugins {
// 添加ksp插件
id("com.google.devtools.ksp") version "<ksp-version>"
...省略其他插件...
}
dependencies {
// 应用jimmer的ksp代码生成器
ksp("org.babyfish.jimmer:jimmer-ksp:${jimmerVersion}")
...省略其他依赖...
}
// 仅修改 .dto 文件时也重新生成 DTO。
tasks.withType<KspAATask>().configureEach {
val dtoDirectory = if (name == "kspKotlin") "src/main/dto" else "src/test/dto"
inputs.files(fileTree(dtoDirectory) { include("**/*.dto") })
.withPathSensitivity(PathSensitivity.RELATIVE)
}
// 将生成的代码添加到编译路径中。
// 没有这个配置,gradle命令仍然可以正常执行,
// 但是, Intellij无法找到生成的源码。
kotlin {
sourceSets.main {
kotlin.srcDir("build/generated/ksp/main/kotlin")
}
}如果配置了
jimmer.dto.dirs或jimmer.dto.testDirs,请使用实际配置的目录替换上述默认目录。 文件树会跟踪 DTO 文件的修改、新增和删除;输入未变化时,任务仍可保持UP-TO-DATE。 修改 DTO 后请执行 Gradle 构建;不通 过 Gradle 执行的 IDE 构建不使用上述配置。 -
用法二:使用社区提供的出插件
https://github.com/ArgonarioD/gradle-plugin-jimmer
- Java(Gradle插件)
- Kotlin(插件)
build.gradleplugins {
// 从 Gradle 7.0 开始,可以使用 "latest.release" 代替具体的版本号,代表使用最新版本
// 也可以使用 '+' 字符代表从 '+' 字符开始匹配最新的版本号
id "tech.argonariod.gradle-plugin-jimmer" version "latest.release"
... 省略其它插件 ...
}
jimmer {
// 设定 jimmer 依赖版本,此处也可以使用 "latest.release" 或 "0.+" 等版本范围表达式
version = "${jimmerVersion}"
}build.gradle.ktsplugins {
// 从 Gradle 7.0 开始,可以使用 "latest.release" 代替具体的版本号,代表使用最新版本
id("tech.argonariod.gradle-plugin-jimmer") version "latest.release"
// 也可以使用 '+' 字符代表从 '+' 字符开始匹配最新的版本号
// 添加ksp插件
id("com.google.devtools.ksp") version "<ksp-version>"
... 省略其它插件 ...
}
jimmer {
// 设定 jimmer 依赖版本,此处也可以使用 "latest.release" 或 "0.+" 等版本范围表达式
version = "${jimmerVersion}"
}