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..**"
    }
  ]
}

https://graalvm.github.io/native-build-tools/latest/maven-plugin.html#agent-support-configuring-options

posted @ 2023-11-13 02:11  yghr  阅读(117)  评论(0)    收藏  举报