|
1 | 1 | # GraalVM Reachability Metadata Repository |
2 | 2 |
|
3 | | -This repository enables users of [GraalVM Native Image](https://www.graalvm.org/latest/reference-manual/native-image/) to share and reuse metadata for libraries and frameworks in the Java ecosystem. |
4 | | -The repository is integrated with [GraalVM Native Build Tools](https://github.com/graalvm/native-build-tools) beginning with version `0.9.13`: |
5 | | -you can enable automatic use of the metadata repository for [Gradle projects](https://graalvm.github.io/native-build-tools/latest/gradle-plugin.html#metadata-support) or [Maven projects](https://graalvm.github.io/native-build-tools/latest/maven-plugin.html#metadata-support). |
| 3 | +This repository provides [reachability metadata](https://www.graalvm.org/latest/reference-manual/native-image/metadata/) that lets Java libraries and frameworks work out of the box with [GraalVM Native Image](https://www.graalvm.org/latest/reference-manual/native-image/). |
6 | 4 |
|
7 | | -[This web page](https://www.graalvm.org/native-image/libraries-and-frameworks/) provides an overview of libraries and frameworks that are tested and thus ready for GraalVM Native Image. |
8 | | -If you would like to see your library or framework in the list too, please open a pull request and extend [this JSON file](https://github.com/oracle/graalvm-reachability-metadata/blob/master/library-and-framework-list.json). |
| 5 | +To get out-of-the-box support, use the [GraalVM Gradle Plugin](https://graalvm.github.io/native-build-tools/latest/gradle-plugin.html) or the [GraalVM Maven Plugin](https://graalvm.github.io/native-build-tools/latest/maven-plugin.html); they automatically use the [reachability metadata](https://www.graalvm.org/latest/reference-manual/native-image/metadata/) from this repository. |
| 6 | + |
| 7 | +--- |
| 8 | + |
| 9 | +### 🔎 Check if Your Library or Framework Is Supported |
| 10 | + |
| 11 | +To see whether your library or framework is supported, visit [this page](https://www.graalvm.org/native-image/libraries-and-frameworks/). It lists libraries and frameworks that are tested and ready for GraalVM Native Image. |
| 12 | + |
| 13 | +If you’d like yours to appear there as well, open a pull request updating [this JSON file](https://github.com/oracle/graalvm-reachability-metadata/blob/master/library-and-framework-list.json). |
9 | 14 | Before submitting a pull request, please read [this guide](docs/CONTRIBUTING.md#tested-libraries-and-frameworks). |
10 | 15 |
|
11 | | -## Rationale |
| 16 | +### 📚 Request Support for a New Library |
| 17 | + |
| 18 | +Open a [library-request ticket](https://github.com/oracle/graalvm-reachability-metadata/issues/new?template=01_support_new_library.yml), include the Maven coordinates, and our automation will take it from there (🤖). |
| 19 | + |
| 20 | +### 🛠️ Request an Update to an Existing Library |
| 21 | + |
| 22 | +Open an [update ticket](https://github.com/oracle/graalvm-reachability-metadata/issues/new?template=02_update_existing_library.yml) and include the Maven coordinates of the library that needs changes. |
| 23 | + |
| 24 | +--- |
12 | 25 |
|
13 | | -When you use Native Image to build native executables it only includes the elements reachable from your application entry point, its dependent libraries, and JDK classes discovered through static analysis. |
14 | | -However, the reachability of some elements (such as classes, methods, or fields) may not be discoverable due to Java’s dynamic features including reflection, resource access, dynamic proxies, and serialization. |
15 | | -If an element is not reachable, it is not included in the generated executable at build time, which can lead to failures at run time. |
16 | | -Native Image has built-in metadata for JDK classes but user code and dependencies may use dynamic features of Java that are undiscoverable by the Native Image analysis. |
17 | | -For this reason, Native Image accepts additional [reachability metadata](https://www.graalvm.org/reference-manual/native-image/metadata/) in the form of JSON files. |
18 | | -Since this metadata is specific to a specific code base, the JSON files providing the corresponding metadata can be shared for libraries and frameworks. |
19 | | -This repository is a centralized place for sharing such files for libraries and frameworks that do not provide built-in metadata yet. |
20 | | -It is also used to retrofit metadata for older versions of libraries and frameworks. |
| 26 | +### Contributing |
21 | 27 |
|
22 | | -If you are a library or framework maintainer, the best way to make your code ready for GraalVM Native Image is to provide reachability metadata as part of your JARs. |
23 | | -Please visit [this web page](https://www.graalvm.org/latest/reference-manual/native-image/metadata/) for more information. |
| 28 | +We welcome contributions from the community. Thank you! |
24 | 29 |
|
25 | | -## Contributing |
| 30 | +Before submitting a pull request, please [open a ticket](https://github.com/oracle/graalvm-reachability-metadata/issues/new?template=02_update_existing_library.yml), mark that you want to fix it yourself, and [review our contribution guide](docs/CONTRIBUTING.md). |
26 | 31 |
|
27 | | -We welcome contributions from the community. |
28 | | -Before submitting a pull request, please [review our contribution guide](docs/CONTRIBUTING.md). |
| 32 | +### Further Information |
29 | 33 |
|
30 | | -## Further Information |
| 34 | +1. Continuous integration is described in [CI.md](docs/CI.md). |
| 35 | +2. Pull request review guidelines are in [REVIEWING.md](docs/REVIEWING.md). |
| 36 | +3. Development workflow is described in [DEVELOPING.md](docs/DEVELOPING.md). |
31 | 37 |
|
32 | | -1. Continuous integration is described in [CI.md](docs/CI.md). |
33 | | -2. PR Reviewing guides are described in [REVIEWING.md](docs/REVIEWING.md). |
34 | | -3. Development is described in [DEVELOPING.md](docs/DEVELOPING.md). |
| 38 | +--- |
| 39 | +Built with love by the community and the [GraalVM](https://www.graalvm.org/), [Spring](https://spring.io/projects/spring-boot), and [Micronaut](https://micronaut.io/) teams. |
0 commit comments