Fixes native:metadata-copy Maven Goal not available in Spring Boot Starter (#571)

This commit is contained in:
Ling Hengqian 2023-09-26 13:58:45 +08:00 committed by GitHub
parent 089dbc294b
commit d9d3b58cfc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 162 additions and 302 deletions

View File

@ -24,7 +24,7 @@ env:
MAVEN_OPTS: -Dhttps.protocols=TLSv1.2 -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true MAVEN_OPTS: -Dhttps.protocols=TLSv1.2 -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true
jobs: jobs:
# We only execute nativeTest on `dynamic-datasource-spring-boot3-starter`, since only Spring Boot OSS 3 support provides support for GraalVM Native Image # We only execute nativeTest on `dynamic-datasource-spring-boot3-starter`, since only Spring Boot OSS 3 provides support for GraalVM Native Image
test-graalvm-ce-ci: test-graalvm-ce-ci:
name: NativeTest CI - GraalVM CE ${{ matrix.java-version }} on ${{ matrix.os }} name: NativeTest CI - GraalVM CE ${{ matrix.java-version }} on ${{ matrix.os }}
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
@ -33,7 +33,7 @@ jobs:
strategy: strategy:
matrix: matrix:
os: [ ubuntu-latest ] os: [ ubuntu-latest ]
java-version: [ '17.0.8' ] java-version: [ '21' ]
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
- uses: graalvm/setup-graalvm@v1 - uses: graalvm/setup-graalvm@v1
@ -44,7 +44,7 @@ jobs:
cache: 'maven' cache: 'maven'
- name: Build Spring Boot Starter 3 test with Maven - name: Build Spring Boot Starter 3 test with Maven
run: | run: |
./mvnw -am -pl dynamic-datasource-spring-boot3-starter -PnativeTestInSpringBoot -T1C -B -e clean test ./mvnw -PnativeTestInSpringBoot -T1C -B -e clean test
test-hotspot-jdk-ci: test-hotspot-jdk-ci:
name: Test CI - JDK ${{ matrix.java-version }} on ${{ matrix.os }} name: Test CI - JDK ${{ matrix.java-version }} on ${{ matrix.os }}
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
@ -52,7 +52,7 @@ jobs:
strategy: strategy:
matrix: matrix:
os: [ ubuntu-latest ] os: [ ubuntu-latest ]
java-version: [ '17', '20' ] java-version: [ '17', '21-ea' ]
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
- name: Setup java - name: Setup java

View File

@ -41,13 +41,13 @@ failed to discover tests 的测试库。
sudo apt install unzip zip curl sed -y sudo apt install unzip zip curl sed -y
curl -s "https://get.sdkman.io" | bash curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh" source "$HOME/.sdkman/bin/sdkman-init.sh"
sdk install java 17.0.8-graalce sdk install java 21-graalce
sdk use java 17.0.8-graalce sdk use java 21-graalce
sudo apt-get install build-essential libz-dev zlib1g-dev -y sudo apt-get install build-essential libz-dev zlib1g-dev -y
git clone git@github.com:baomidou/dynamic-datasource.git git clone git@github.com:baomidou/dynamic-datasource.git
cd ./dynamic-datasource/ cd ./dynamic-datasource/
./mvnw -am -pl dynamic-datasource-spring-boot3-starter -PnativeTestInSpringBoot -T1C -B clean test ./mvnw -PnativeTestInSpringBoot -T1C -e clean test
``` ```
贡献者在提交 PR 后,位于 Github Actions 的 CI 将进行此验证。如果 nativeTest 执行失败,请跳转到[本文的 2.2 一节](./CONTRIBUTING.md)。 贡献者在提交 PR 后,位于 Github Actions 的 CI 将进行此验证。如果 nativeTest 执行失败,请跳转到[本文的 2.2 一节](./CONTRIBUTING.md)。
@ -69,8 +69,6 @@ System Property 屏蔽部分单元测试在 GraalVM Native Image 下运行。
调整 Maven Profile 和 GraalVM Tracing Agent 的 Filter 链。 调整 Maven Profile 和 GraalVM Tracing Agent 的 Filter 链。
以下命令仅为 `dynamic-datasource-spring-boot3-starter` 生成 Conditioanl 形态的 GraalVM Reachability Metadata 的一个举例。 以下命令仅为 `dynamic-datasource-spring-boot3-starter` 生成 Conditioanl 形态的 GraalVM Reachability Metadata 的一个举例。
在 https://github.com/graalvm/native-build-tools/issues/500 关闭之前,你都需要手动调整 `native-image-configure``input-dir`
`./mvnw -PgenerateMetadata -DskipNativeTests -e clean test` 真实的输出目录。
对于测试类和测试文件独立使用的 GraalVM Reachability Metadata贡献者应该放置到相关子模块对应的 对于测试类和测试文件独立使用的 GraalVM Reachability Metadata贡献者应该放置到相关子模块对应的
`${project.basedir}/src/test/resources/META-INF/native-image/${project.artifactId}-test-metadata/` 文件夹下。`${}` 内为 `${project.basedir}/src/test/resources/META-INF/native-image/${project.artifactId}-test-metadata/` 文件夹下。`${}` 内为
@ -78,20 +76,9 @@ POM 4.0 的常规系统变量,自行替换。
```bash ```bash
git clone git@github.com:baomidou/dynamic-datasource.git git clone git@github.com:baomidou/dynamic-datasource.git
cd ./dynamic-datasource/ cd ./dynamic-datasource/
./mvnw -PgenerateMetadata -DskipNativeTests -e -T1C clean test native:metadata-copy
./mvnw -PgenerateMetadata -DskipNativeTests -e clean test ./mvnw -PnativeTestInSpringBoot -T1C -e clean test
mkdir -p "./dynamic-datasource-spring-boot3-starter/src/test/resources/META-INF/native-image/com.baomidou/dynamic-datasource-spring-boot3-starter/"
native-image-configure generate-conditional\
--user-code-filter="./native-image/user-code-filter.json"\
--class-name-filter="./native-image/extra-filter.json"\
--input-dir="./dynamic-datasource-spring-boot3-starter/target/native/agent-output/test/session-45270-20230907T013541Z/"\
--output-dir="./dynamic-datasource-spring-boot3-starter/src/main/resources/META-INF/native-image/com.baomidou/dynamic-datasource-spring-boot3-starter/"
./mvnw -am -pl dynamic-datasource-spring-boot3-starter -PnativeTestInSpringBoot -T1C -B -e clean test
``` ```
请手动删除无任何具体条目的 JSON 文件。 请手动删除无任何具体条目的 JSON 文件。

View File

@ -60,4 +60,18 @@
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
</dependencies> </dependencies>
</project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.graalvm.buildtools</groupId>
<artifactId>native-maven-plugin</artifactId>
<version>${native-maven-plugin.version}</version>
</plugin>
</plugins>
</build>
</project>

View File

@ -6,10 +6,5 @@
{ {
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"}, "condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
"name":"[Lcom.sun.management.internal.DiagnosticCommandInfo;" "name":"[Lcom.sun.management.internal.DiagnosticCommandInfo;"
},
{
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
"name":"java.util.Arrays",
"methods":[{"name":"asList","parameterTypes":["java.lang.Object[]"] }]
} }
] ]

View File

@ -274,175 +274,5 @@
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.DynamicRoutingDataSource"}, "condition":{"typeReachable":"com.baomidou.dynamic.datasource.DynamicRoutingDataSource"},
"name":"com.baomidou.dynamic.datasource.strategy.LoadBalanceDynamicDataSourceStrategy", "name":"com.baomidou.dynamic.datasource.strategy.LoadBalanceDynamicDataSourceStrategy",
"methods":[{"name":"<init>","parameterTypes":[] }] "methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
"name":"com.ibm.icu.text.Collator"
},
{
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.toolkit.DsConfigUtil"},
"name":"java.beans.PropertyVetoException"
},
{
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.DynamicRoutingDataSource"},
"name":"java.io.Closeable",
"queryAllPublicMethods":true
},
{
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
"name":"java.lang.Boolean",
"fields":[{"name":"TYPE"}]
},
{
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
"name":"java.lang.Byte",
"fields":[{"name":"TYPE"}]
},
{
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
"name":"java.lang.Character",
"fields":[{"name":"TYPE"}]
},
{
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.DynamicRoutingDataSource"},
"name":"java.lang.Cloneable",
"queryAllPublicMethods":true
},
{
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
"name":"java.lang.Deprecated",
"queryAllPublicMethods":true
},
{
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
"name":"java.lang.Double",
"fields":[{"name":"TYPE"}]
},
{
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
"name":"java.lang.Float",
"fields":[{"name":"TYPE"}]
},
{
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
"name":"java.lang.Integer",
"fields":[{"name":"TYPE"}]
},
{
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.aop.DynamicDataSourceAnnotationAdvisor$AnnotationMethodPoint$AnnotationMethodMatcher"},
"name":"java.lang.Iterable",
"methods":[{"name":"forEach","parameterTypes":["java.util.function.Consumer"] }, {"name":"spliterator","parameterTypes":[] }]
},
{
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
"name":"java.lang.Long",
"fields":[{"name":"TYPE"}]
},
{
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.DynamicRoutingDataSource"},
"name":"java.lang.Object",
"queryAllDeclaredMethods":true
},
{
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.aop.DynamicDataSourceAnnotationAdvisor$AnnotationMethodPoint$AnnotationMethodMatcher"},
"name":"java.lang.Object",
"methods":[{"name":"equals","parameterTypes":["java.lang.Object"] }, {"name":"getClass","parameterTypes":[] }, {"name":"hashCode","parameterTypes":[] }, {"name":"notify","parameterTypes":[] }, {"name":"notifyAll","parameterTypes":[] }, {"name":"toString","parameterTypes":[] }, {"name":"wait","parameterTypes":[] }, {"name":"wait","parameterTypes":["long"] }, {"name":"wait","parameterTypes":["long","int"] }]
},
{
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.toolkit.DsConfigUtil"},
"name":"java.lang.Object",
"queryAllPublicMethods":true
},
{
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.toolkit.DsConfigUtil"},
"name":"java.lang.ObjectBeanInfo"
},
{
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.toolkit.DsConfigUtil"},
"name":"java.lang.ObjectCustomizer"
},
{
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
"name":"java.lang.Short",
"fields":[{"name":"TYPE"}]
},
{
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
"name":"java.lang.StackTraceElement",
"queryAllPublicMethods":true
},
{
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
"name":"java.lang.String",
"fields":[{"name":"TYPE"}]
},
{
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
"name":"java.lang.Void",
"fields":[{"name":"TYPE"}]
},
{
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
"name":"java.math.BigDecimal"
},
{
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
"name":"java.math.BigInteger"
},
{
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
"name":"java.sql.SQLException",
"fields":[{"name":"next"}]
},
{
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
"name":"java.util.Date"
},
{
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
"name":"java.util.PropertyPermission",
"methods":[{"name":"<init>","parameterTypes":["java.lang.String","java.lang.String"] }]
},
{
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
"name":"java.util.logging.LogManager",
"methods":[{"name":"getLoggingMXBean","parameterTypes":[] }]
},
{
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
"name":"java.util.logging.LoggingMXBean",
"queryAllPublicMethods":true
},
{
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.DynamicRoutingDataSource"},
"name":"javax.naming.Referenceable",
"queryAllPublicMethods":true
},
{
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.aop.DynamicDataSourceAnnotationAdvisor$AnnotationMethodPoint$AnnotationMethodMatcher"},
"name":"javax.sql.CommonDataSource",
"queryAllPublicMethods":true,
"methods":[{"name":"createShardingKeyBuilder","parameterTypes":[] }]
},
{
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.DynamicRoutingDataSource"},
"name":"javax.sql.ConnectionPoolDataSource",
"queryAllPublicMethods":true
},
{
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.DynamicRoutingDataSource"},
"name":"javax.sql.DataSource",
"queryAllPublicMethods":true
},
{
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.aop.DynamicDataSourceAnnotationAdvisor$AnnotationMethodPoint$AnnotationMethodMatcher"},
"name":"javax.sql.DataSource",
"queryAllPublicMethods":true,
"methods":[{"name":"createConnectionBuilder","parameterTypes":[] }]
},
{
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
"name":"sun.security.provider.SHA2$SHA256",
"methods":[{"name":"<init>","parameterTypes":[] }]
} }
] ]

View File

@ -1,8 +0,0 @@
{
"resources":{
"includes":[{
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
"pattern":"\\QMETA-INF/services/java.sql.Driver\\E"
}]},
"bundles":[]
}

View File

@ -1,17 +1,29 @@
{ {
"resources":{ "resources":{
"includes":[{ "includes":[{
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.fixture.v3.NestDataSourceTest"}, "condition":{"typeReachable":"com.baomidou.dynamic.datasource.fixture.v3.NestDataSourceTest"},
"pattern":"\\Qdb/add-remove-datasource.sql\\E" "pattern":"\\Qdb/add-remove-datasource.sql\\E"
}, { }, {
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.creator.druid.DruidDataSourceCreator"}, "condition":{"typeReachable":"com.baomidou.dynamic.datasource.creator.druid.DruidDataSourceCreator"},
"pattern":"\\QMETA-INF/druid-driver.properties\\E" "pattern":"\\QMETA-INF/druid-driver.properties\\E"
}, { }, {
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.creator.druid.DruidDataSourceCreator"}, "condition":{"typeReachable":"com.baomidou.dynamic.datasource.creator.druid.DruidDataSourceCreator"},
"pattern":"\\QMETA-INF/druid-filter.properties\\E" "pattern":"\\QMETA-INF/druid-filter.properties\\E"
}, { }, {
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"}, "condition":{"typeReachable":"com.baomidou.dynamic.datasource.creator.druid.DruidDataSourceCreator"},
"pattern":"\\Qorg/h2/util/data.zip\\E" "pattern":"\\QMETA-INF/services/com.alibaba.druid.filter.Filter\\E"
}]}, }, {
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
"pattern":"\\QMETA-INF/services/java.lang.System$LoggerFinder\\E"
}, {
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
"pattern":"\\QMETA-INF/services/java.sql.Driver\\E"
}, {
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
"pattern":"\\Qorg/h2/util/data.zip\\E"
}, {
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
"pattern":"jdk.jfr:\\Qjdk/jfr/internal/query/view.ini\\E"
}]},
"bundles":[] "bundles":[]
} }

View File

@ -6,6 +6,14 @@
{"excludeClasses": "com.sun.management.**"}, {"excludeClasses": "com.sun.management.**"},
{"excludeClasses": "sun.management.**"}, {"excludeClasses": "sun.management.**"},
{"excludeClasses": "javax.management.**"}, {"excludeClasses": "javax.management.**"},
{"excludeClasses": "java.**"},
{"includeClasses": "java.util.Properties"},
{"includeClasses": "java.lang.Thread"},
{"excludeClasses": "sun.misc.**"},
{"excludeClasses": "sun.security.**"},
{"excludeClasses": "com.ibm.icu.text.**"},
{"excludeClasses": "javax.naming.**"},
{"excludeClasses": "javax.sql.**"},
{"excludeClasses": "org.h2.**"}, {"excludeClasses": "org.h2.**"},
{"excludeClasses": "oracle.ucp.**"}, {"excludeClasses": "oracle.ucp.**"},
{"excludeClasses": "org.apache.tomcat.jdbc.**"}, {"excludeClasses": "org.apache.tomcat.jdbc.**"},

192
pom.xml
View File

@ -59,7 +59,7 @@
<commons-dbcp2.version>2.9.0</commons-dbcp2.version> <commons-dbcp2.version>2.9.0</commons-dbcp2.version>
<p6spy.version>3.9.1</p6spy.version> <p6spy.version>3.9.1</p6spy.version>
<seata.version>1.4.2</seata.version> <seata.version>1.4.2</seata.version>
<lombok.version>1.18.28</lombok.version> <lombok.version>1.18.30</lombok.version>
<h2.version>2.2.222</h2.version> <h2.version>2.2.222</h2.version>
<atomikos.version>4.0.6</atomikos.version> <atomikos.version>4.0.6</atomikos.version>
<junit-jupiter.version>5.10.0</junit-jupiter.version> <junit-jupiter.version>5.10.0</junit-jupiter.version>
@ -75,7 +75,7 @@
<license-maven-plugin.version>4.2</license-maven-plugin.version> <license-maven-plugin.version>4.2</license-maven-plugin.version>
<maven-gpg-plugin.version>3.1.0</maven-gpg-plugin.version> <maven-gpg-plugin.version>3.1.0</maven-gpg-plugin.version>
<nexus-staging-maven-plugin.version>1.6.13</nexus-staging-maven-plugin.version> <nexus-staging-maven-plugin.version>1.6.13</nexus-staging-maven-plugin.version>
<native-maven-plugin.version>0.9.26</native-maven-plugin.version> <native-maven-plugin.version>0.9.27</native-maven-plugin.version>
</properties> </properties>
<dependencyManagement> <dependencyManagement>
@ -345,98 +345,120 @@
<profile> <profile>
<id>generateMetadata</id> <id>generateMetadata</id>
<properties> <properties>
<java.version>17</java.version> <java.version>21</java.version>
</properties> </properties>
<build> <build>
<plugins> <pluginManagement>
<!-- We do not collect GraalVM Reachability Metadata from `dynamic-datasource-spring-boot-starter` because only Spring Boot OSS 3 support provides support for GraalVM Native Image--> <plugins>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId>
<artifactId>maven-surefire-plugin</artifactId> <configuration>
<version>${maven-surefire-plugin.version}</version> <includes>
<configuration> <include>com.baomidou.dynamic.datasource.fixture.v3.**</include>
<excludes> </includes>
<exclude>com.baomidou.dynamic.datasource.fixture.v1.**</exclude> </configuration>
</excludes> </plugin>
</configuration> <plugin>
</plugin> <groupId>org.graalvm.buildtools</groupId>
<plugin> <artifactId>native-maven-plugin</artifactId>
<groupId>org.graalvm.buildtools</groupId> <version>${native-maven-plugin.version}</version>
<artifactId>native-maven-plugin</artifactId> <extensions>true</extensions>
<version>${native-maven-plugin.version}</version> <executions>
<extensions>true</extensions> <execution>
<executions> <id>build-native</id>
<execution> <goals>
<id>build-native</id> <goal>compile-no-fork</goal>
<goals> </goals>
<goal>compile-no-fork</goal> <phase>package</phase>
</goals> </execution>
<phase>package</phase> <execution>
</execution> <id>test-native</id>
<execution> <goals>
<id>test-native</id> <goal>test</goal>
<goals> </goals>
<goal>test</goal> <phase>test</phase>
</goals> </execution>
<phase>test</phase> </executions>
</execution> <configuration>
</executions> <agent>
<configuration> <enabled>true</enabled>
<agent> <defaultMode>Conditional</defaultMode>
<enabled>true</enabled> <modes>
<defaultMode>Conditional</defaultMode> <conditional>
<modes> <userCodeFilterPath>${user.dir}/native-image/user-code-filter.json
<conditional> </userCodeFilterPath>
<userCodeFilterPath>${user.dir}/native-image/user-code-filter.json</userCodeFilterPath> <extraFilterPath>${user.dir}/native-image/extra-filter.json
<extraFilterPath>${user.dir}/native-image/extra-filter.json</extraFilterPath> </extraFilterPath>
<parallel>true</parallel> <parallel>true</parallel>
</conditional> </conditional>
</modes> </modes>
</agent> <metadataCopy>
</configuration> <disabledStages>
</plugin> <stage>main</stage>
</plugins> </disabledStages>
<merge>false</merge>
<outputDirectory>
${project.basedir}/src/main/resources/META-INF/native-image/${project.groupId}/${project.artifactId}/
</outputDirectory>
</metadataCopy>
</agent>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build> </build>
</profile> </profile>
<profile> <profile>
<id>nativeTestInSpringBoot</id> <id>nativeTestInSpringBoot</id>
<properties> <properties>
<java.version>17</java.version> <java.version>21</java.version>
</properties> </properties>
<build> <build>
<plugins> <pluginManagement>
<plugin> <plugins>
<groupId>org.springframework.boot</groupId> <plugin>
<artifactId>spring-boot-maven-plugin</artifactId> <artifactId>maven-surefire-plugin</artifactId>
<executions> <configuration>
<execution> <includes>
<id>process-test-aot</id> <include>com.baomidou.dynamic.datasource.fixture.v3.**</include>
<goals> </includes>
<goal>process-test-aot</goal> </configuration>
</goals> </plugin>
</execution> <plugin>
</executions> <groupId>org.springframework.boot</groupId>
</plugin> <artifactId>spring-boot-maven-plugin</artifactId>
<plugin> <executions>
<groupId>org.graalvm.buildtools</groupId> <execution>
<artifactId>native-maven-plugin</artifactId> <id>process-test-aot</id>
<extensions>true</extensions> <goals>
<configuration> <goal>process-test-aot</goal>
<classesDirectory>${project.build.outputDirectory}</classesDirectory> </goals>
<metadataRepository> </execution>
<enabled>true</enabled> </executions>
</metadataRepository> </plugin>
</configuration> <plugin>
<executions> <groupId>org.graalvm.buildtools</groupId>
<execution> <artifactId>native-maven-plugin</artifactId>
<id>native-test</id> <version>${native-maven-plugin.version}</version>
<goals> <extensions>true</extensions>
<goal>test</goal> <configuration>
</goals> <classesDirectory>${project.build.outputDirectory}</classesDirectory>
</execution> <metadataRepository>
</executions> <enabled>true</enabled>
</plugin> </metadataRepository>
</plugins> </configuration>
<executions>
<execution>
<id>test-native</id>
<goals>
<goal>test</goal>
</goals>
<phase>test</phase>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build> </build>
</profile> </profile>
</profiles> </profiles>