Git Mirror 位于 https://github.com/baomidou/dynamic-datasource 。
此项目在 OpenJDK 17 下完成构建,输出产物指向 OpenJDK 8。
当项目导入 IntelliJ IDEA 或 VSCode 时,IDE 对项目的语言级别应当设置为 8。
对于单独的 com.baomidou:dynamic-datasource-spring-boot3-starter
子模块,IDE 的语言级别应当设置为 17。
提交 PR 前,应在 OpenJDK 17 下执行 ./mvnw -T1C clean test
以验证更改是否未破坏单元测试。若有需要请补充或更改单元测试。
假设贡献者处于新的 Ubuntu 22.04.3 LTS 实例下,其可通过如下 bash 命令来通过 SDKMAN! 管理 JDK 和工具链,并执行单元测试。
sudo apt install unzip zip curl sed -y
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
sdk install java 17.0.8-ms
sdk use java 17.0.8-ms
git clone git@github.com:baomidou/dynamic-datasource.git
cd ./dynamic-datasource/
./mvnw -T1C clean test
项目的输出产物对在 GraalVM Native Image 下的可用性的验证,是通过 GraalVM Native Build Tools 的 Maven Plugin 子项目来完成的。
通过在 JVM 下运行单元测试,为单元测试打上 junit-platform-unique-ids*
,此后构建为 GraalVM Native Image 进行 nativeTest 来测试在
GraalVM Native Image 下的单元测试覆盖率。请不要使用 io.kotest:kotest-runner-junit5-jvm:5.5.4
等在 test listener
mode 下
failed to discover tests 的测试库。
项目定义了 nativeTestInSpringBoot
的 Maven Profile 用于为 dynamic-datasource-spring-boot3-starter
模块执行 nativeTest。
假设贡献者处于新的 Ubuntu 22.04.3 LTS 实例下,其可通过如下 bash 命令通过 SDKMAN! 管理 JDK 和工具链,
并为 dynamic-datasource-spring-boot3-starter
子模块执行 nativeTest。
sudo apt install unzip zip curl sed -y
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
sdk install java 21.0.1-graalce
sdk use java 21.0.1-graalce
sudo apt-get install build-essential libz-dev zlib1g-dev -y
git clone git@github.com:baomidou/dynamic-datasource.git
cd ./dynamic-datasource/
./mvnw -PnativeTestInSpringBoot -T1C -e clean test
贡献者在提交 PR 后,位于 Github Actions 的 CI 将进行此验证。如果 nativeTest 执行失败,请跳转到本文的 2.2 一节。
当贡献者发现缺少与 dynamic-datasource
无关的第三方库的 GraalVM Reachability Metadata 时,应当在
https://github.com/oracle/graalvm-reachability-metadata 打开新的 issue, 并提交包含依赖的第三方库缺失的 GraalVM Reachability
Metadata 的 PR。
如果 nativeTest 执行失败, 应为单元测试生成初步的 GraalVM Reachability Metadata,并手动调整以修复 nativeTest。
如有需要,请使用 org.junit.jupiter.api.condition.DisabledInNativeImage
注解或 org.graalvm.nativeimage.imagecode
的
System Property 屏蔽部分单元测试在 GraalVM Native Image 下运行。
请不要为 SpEL 功能编写可能的 nativeTest,参考尚未关闭的 spring-projects/spring-framework#29548 。
项目定义了 generateMetadata
的 Maven Profile 用于在普通 JVM 下携带 GraalVM Tracing Agent 执行单元测试,并在特定目录下生成或合并
已有的 GraalVM Reachability Metadata 文件。可通过如下 bash 命令简单处理此流程。贡献者仍可能需要手动调整具体的 JSON 条目,并在适当的时候
调整 Maven Profile 和 GraalVM Tracing Agent 的 Filter 链。
以下命令仅为 dynamic-datasource-spring-boot3-starter
生成 Conditional 形态的 GraalVM Reachability Metadata 的一个举例。
对于测试类和测试文件独立使用的 GraalVM Reachability Metadata,贡献者应该放置到相关子模块对应的
${project.basedir}/src/test/resources/META-INF/native-image/${project.artifactId}-test-metadata/
文件夹下。${}
内为
POM 4.0 的常规系统变量,自行替换。
git clone git@github.com:baomidou/dynamic-datasource.git
cd ./dynamic-datasource/
./mvnw -PgenerateMetadata -DskipNativeTests -e -T1C clean test native:metadata-copy
请手动删除无任何具体条目的 JSON 文件。
PR 应提交到位于 Github 的 Git Mirror,即 https://github.com/baomidou/dynamic-datasource 。 位于 Github Actions 的 CI 将在 OpenJDK 8+ 下对 PR 对应分支执行对应的单元测试。