Skip to content

All versions since 0.2.0

0.2.0

Added

  • Support argFile configuration as an alternative filtering mechanism to setting included symbols directly in the extension, use whitelist.argFile property in the library config.
  • Add DumpIncludes task to dump includes encountered in a library’s headers to a text file in the build directory per convention: gradlew dumpIncludes. This file can be copied and modified for further usage as argFile.

Changed

  • Parallelize tasks running Jextract for faster multi-lib builds.

Fixed

  • Use Jextract 22 for JVM 23.

Removed

  • Remove the custom download location DSL, but the download task can be configured with custom URLs.
  • Remove the separate download plugin and merge download stuff into this plugin.

0.2.1

Fixed

  • Make DownloadTask compatible with the configuration cache.

0.3.0

Added

  • Create a changelog file for release notes
  • The source set the generated sources are added to is now user-selectable via extension property, main is chosen by default.
  • Tasks became cacheable, so the downloaded Jextract archives and generated sources can be shared and re-used via build cache.

Changed

  • Jextract is downloaded and installed to the project build directory to avoid access conflicts for output files and directories in multi-project builds.

0.4.0

Changed

  • When Jextract 22 is requested, Build 22-jextract+6-47 will be downloaded from now on.

Fixed

  • Improved configuration cache stability by moving provider creation to task action.

0.5.0

Changed

  • Replace the nested resource property of DownloadTask with a property that receives an instance of the Resource class from a separate business model. The values of these resources strictly belong together, so a data class coming from a business model is more appropriate than a bean with separate properties.
  • The plugin adds an extension to each source set where Jextract libraries can be added. This breaking API change improves flexibility and stability.

Added

  • Add output properties in DSL extension to customize the output path per library or as a parent folder for all libraries without a specified output path. If a library has no explicit output path, its name is used to create a subdirectory under the top-level output path. If no explicit top-level output is given, it defaults to a convention in the build directory.
  • Add DSL properties to configure Jextract 21 to generate source files instead of class files (per library or top-level).

Fixed

  • Check for the Java toolchain version only if and after the Java plugin is applied.
  • Pass the --use-system-load-library command line flag only to Jextract 22 or above, fails with Jextract 21 and below.

Removed

  • Remove The sourceSet property in the DSL which is superseded by a source set extension.

1.0.0-beta-1

Added

  • Managing Jextract installations has moved to a shared build service. Running clean doesn’t destroy the downloads and installations anymore, because they are no build artefacts or task outputs. This reduces Jextract-related network requests.
  • Custom download locations for Jextract distributions can be configured in the DSL extension. Configuring the download task isn’t necessary anymore.

Changed

  • The DSL to configure the Java version for the plugin has changed. Builds that let the plugin use the toolchain are not affected.
  • The Jextract tasks have been reimplemented without the worker API. If you configure the tasks directly in your build, this version will be a breaking change for you. Please try to configure the plugin via DSL, or migrate to the new tasks.

Fixed

  • Task dependencies are declared properly, so Kotlin and similar tasks run after Jextract.
  • Configuration cache doesn’t fail anymore with “executable not found” error.

Removed

  • Tasks that make use of the worker API have been removed and replaced with the new implementations.
  • Tasks for downloading and extracting Jextract have been removed and replaced with the shared build service.

1.0.0-beta-2

Fixed

  • Recognizes Windows OS again.

1.0.0

Added

  • Added example project with native binaries as resources
  • Docs: Added latest release to site title
  • Added API docs generated by Dokka

1.1.0

Added

changed

  • Migrated example project to pure Java because Kotlin still doesn’t support Java 25 compile target.

1.2.0

Breaking

  • Upgraded required JRE and Gradle versions for the plugin:
    • Requires Java 21 or higher, was Java 17 before.
    • Requires Gradle 8.5 or above that is compatible with Java 21.
    • This doesn’t affect Java toolchains.

Changed

  • The code has been migrated to Java to get rid of the Kotlin dependency. This shouldn’t be a breaking change.
  • If the plugin finds a cached version of a file to be downloaded, its validity is checked by comparing its checksum with that of the download resource.
  • The JextractStore build service loads the distribution data once when it is created.

1.3.0

Added

  • This release primarily contains features for better interoperability with Jlink and Jpackage.
    • The plugin registers a task that can create JMOD archives containing compiled classes and resources, C headers, and native binaries. The JMOD is exposed as a secondary variant, so it can be consumed by other projects.
    • Added better support for testing and running projects where binaries are loaded from the library search path. This can also be useful for linking the artifact into a custom runtime image or native application.

Improvements

  • The occurrence order of this plugin and Java plugins in the build script doesn’t matter under any circumstances. A Java plugin could even be omitted in the build script.
  • Removed an occurrence of eager configuration.
  • Consolidated the plugin’s implementation.
  • Added missing Javadoc comments
  • Updated example project to reflect the plugin features

1.4.0 Latest

Added

  • A local Jextract installation can be configured with the Gradle property org.openjdk.jextract.installation-path instead of the build script DSL. This is the cleaner solution and recommended in the future.
  • Native header and binary files for a Jextract library can be consumed from dependencies, e.g., another project that uses Gradle Native.

changed

  • The distributions file should be configured with the jextract.installation.distributions property.
  • The plugin uses conventions to configure properties instead of setting them. So plugin conventions and user settings won’t be joined anymore.
    • The name of a configured library is either used as library name to be loaded per convention, or the list of library names can be completely set by the user in the build script.

Deprecated

  • The jextract.installation.location property shouldn’t be used anymore and will be removed in the next major release. Local Jextract installation should be configured via user-specific Gradle property.
  • The jextract.distributions property will be moved to jextract.installation.distributions.