Generate GraalVM Reachability Metadata
reference:
https://graalvm.github.io/native-build-tools/latest/maven-plugin.html#agent-support
maven项目配置native-image插件使用tracing-agent跑单测生成reachability metadata
<profile>
<id>generateReachabilityMetadata</id>
<build>
<plugins>
<plugin>
<groupId>org.graalvm.buildtools</groupId>
<artifactId>native-maven-plugin</artifactId>
<version>0.9.28</version>
<extensions>true</extensions>
<executions>
<execution>
<id>test-native</id>
<goals>
<goal>test</goal>
</goals>
<phase>test</phase>
</execution>
<execution>
<id>build-native</id>
<goals>
<goal>compile-no-fork</goal>
</goals>
<phase>package</phase>
</execution>
</executions>
<configuration>
<!-- for agent -->
<agent>
<defaultMode>Standard</defaultMode>
<options>
<builtinCallerFilter>true</builtinCallerFilter>
<builtinHeuristicFilter>true</builtinHeuristicFilter>
<enableExperimentalPredefinedClasses>true
</enableExperimentalPredefinedClasses>
<enableExperimentalUnsafeAllocationTracing>true
</enableExperimentalUnsafeAllocationTracing>
<trackReflectionMetadata>true</trackReflectionMetadata>
</options>
<metadataCopy>
<merge>true</merge>
</metadataCopy>
</agent>
<!-- for metadata repository -->
<metadataRepository>
<enabled>true</enabled>
</metadataRepository>
</configuration>
</plugin>
</plugins>
</build>
</profile>
如果发现生成的reachability metadata文件存在无关的class,可以配置filter文件来过滤掉:
在option标签下设置
<options>
<callerFilterFiles>
<filterFile>caller-filter-file1.json</filterFile>
<filterFile>caller-filter-file2.json</filterFile>
</callerFilterFiles>
<accessFilterFiles>
<filterFile>access-filter-file1.json</filterFile>
<filterFile>access-filter-file2.json</filterFile>
</accessFilterFiles>
</options>
参考的access filter file文件:
{
"rules": [
{
"excludeClasses": "org.apache.maven.**"
},
{
"excludeClasses": "org.mockito.**"
},
{
"excludeClasses": "libcore.io.Memory"
},
{
"excludeClasses": "org.powermock.**"
},
{
"includeClasses": "com..**"
}
]
}

浙公网安备 33010602011771号