From 1d0e6a8b3dc4d9586bcea3dbe315480e2b6b394c Mon Sep 17 00:00:00 2001 From: Sebastian Schuberth Date: Tue, 10 Jan 2023 17:03:51 +0100 Subject: [PATCH] Gradle: Use GraalVM's native build tools plugin The advantage of GraalVM's native build tools plugin [1] over Palantir's plugin is that reflection metadata is automatically downloaded and Gradle's native toolchain mechanism [2] is used (via the Foojay Toolchains Plugin [3]) to bootstrap GraalVM. By default, it uses the latest GraalVM release for the language version of the JVM that runs the Gradle build. [1]: https://graalvm.github.io/native-build-tools/latest/gradle-plugin.html [2]: https://docs.gradle.org/current/userguide/toolchains.html [3]: https://github.com/gradle/foojay-toolchains Signed-off-by: Sebastian Schuberth --- cli/build.gradle.kts | 34 +- .../META-INF/native-image/reflect-config.json | 296 ------------------ gradle/libs.versions.toml | 8 +- .../META-INF/native-image/reflect-config.json | 296 ------------------ settings.gradle.kts | 11 + 5 files changed, 23 insertions(+), 622 deletions(-) delete mode 100644 cli/src/main/resources/META-INF/native-image/reflect-config.json delete mode 100644 helper-cli/src/main/resources/META-INF/native-image/reflect-config.json diff --git a/cli/build.gradle.kts b/cli/build.gradle.kts index a5c80a51bc9e4..c29c8d36565a9 100644 --- a/cli/build.gradle.kts +++ b/cli/build.gradle.kts @@ -27,7 +27,7 @@ plugins { application // Apply third-party plugins. - alias(libs.plugins.graal) + alias(libs.plugins.graalVmNativeImage) alias(libs.plugins.shadow) } @@ -36,32 +36,14 @@ application { mainClass.set("org.ossreviewtoolkit.cli.OrtMainKt") } -graal { - graalVersion(libs.versions.graal.get()) - javaVersion("17") - - // Build a standalone native executable or report a failure. - option("--no-fallback") - - // Work-around for: - // "WARNING: Unknown module: org.graalvm.nativeimage.llvm specified to --add-exports" - option("-J--add-modules") - option("-JALL-SYSTEM") - - // Work-around for: - // "Error: Classes that should be initialized at run time got initialized during image building" - option("--initialize-at-build-time=org.jruby.util.RubyFileTypeDetector") - - // Work-around for: - // "Unsupported method java.lang.invoke.MethodHandleNatives.setCallSiteTargetNormal() is reachable" - option("--report-unsupported-elements-at-runtime") - - // Work-around for: - // "Error: Non-reducible loop requires too much duplication" - option("-H:MaxDuplicationFactor=3.0") +graalvmNative { + metadataRepository { + enabled.set(true) + } +} - mainClass("org.ossreviewtoolkit.cli.OrtMainKt") - outputName("ort") +tasks.withType().configureEach { + duplicatesStrategy = DuplicatesStrategy.EXCLUDE } tasks.withType().configureEach { diff --git a/cli/src/main/resources/META-INF/native-image/reflect-config.json b/cli/src/main/resources/META-INF/native-image/reflect-config.json deleted file mode 100644 index 0c1c86dcaf3cd..0000000000000 --- a/cli/src/main/resources/META-INF/native-image/reflect-config.json +++ /dev/null @@ -1,296 +0,0 @@ -[ - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.CallerDataConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.CallerDataConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.ClassOfCallerConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.ContextNameConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.DateConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.ExtendedThrowableProxyConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.FileOfCallerConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.LevelConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.LineOfCallerConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.LineSeparatorConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.LocalSequenceNumberConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.LoggerConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.MDCConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.MarkerConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.MessageConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.MethodOfCallerConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.NopThrowableInformationConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.PrefixCompositeConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.PropertyConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.RelativeTimeConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.RootCauseFirstThrowableProxyConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.ThreadConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.ThrowableProxyConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.color.HighlightingCompositeConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.core.pattern.IdentityCompositeConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.core.pattern.ReplacingCompositeConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.core.pattern.color.BlackCompositeConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.core.pattern.color.BlueCompositeConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.core.pattern.color.BoldBlueCompositeConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.core.pattern.color.BoldCyanCompositeConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.core.pattern.color.BoldGreenCompositeConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.core.pattern.color.BoldMagentaCompositeConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.core.pattern.color.BoldRedCompositeConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.core.pattern.color.BoldWhiteCompositeConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.core.pattern.color.BoldYellowCompositeConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.core.pattern.color.CyanCompositeConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.core.pattern.color.GrayCompositeConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.core.pattern.color.GreenCompositeConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.core.pattern.color.MagentaCompositeConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.core.pattern.color.RedCompositeConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.core.pattern.color.WhiteCompositeConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.core.pattern.color.YellowCompositeConverter", - "allPublicConstructors": true - } -] diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b9c83b0816861..dbea0365d1731 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,7 +2,8 @@ detektPlugin = "1.22.0" dokkaPlugin = "1.7.20" downloadPlugin = "5.3.0" -graalPlugin = "0.12.0" +foojayResolverConventionPlugin = "0.4.0" +graalVmNativeImagePlugin = "0.9.19" graphQlPlugin = "6.3.3" ideaExtPlugin = "1.1.7" kotlinPlugin = "1.8.0" @@ -22,8 +23,6 @@ diskLruCache = "2.0.2" exposed = "0.41.1" flexmark = "0.64.0" freemarker = "2.3.31" -# @keep this version which is only being used via get(). -graal = "22.2.0" greenmail = "1.6.12" hikari = "5.0.1" hoplite = "2.7.0" @@ -66,7 +65,8 @@ xz = "1.9" detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detektPlugin" } dokka = { id = "org.jetbrains.dokka", version.ref = "dokkaPlugin" } download = { id = "de.undercouch.download", version.ref = "downloadPlugin" } -graal = { id = "com.palantir.graal", version.ref = "graalPlugin" } +foojayResolverConvention = { id = "org.gradle.toolchains.foojay-resolver-convention", version.ref = "foojayResolverConventionPlugin" } +graalVmNativeImage = { id = "org.graalvm.buildtools.native", version.ref = "graalVmNativeImagePlugin" } graphQl = { id = "com.expediagroup.graphql", version.ref = "graphQlPlugin" } ideaExt = { id = "org.jetbrains.gradle.plugin.idea-ext", version.ref = "ideaExtPlugin" } kotlin = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlinPlugin" } diff --git a/helper-cli/src/main/resources/META-INF/native-image/reflect-config.json b/helper-cli/src/main/resources/META-INF/native-image/reflect-config.json deleted file mode 100644 index 0c1c86dcaf3cd..0000000000000 --- a/helper-cli/src/main/resources/META-INF/native-image/reflect-config.json +++ /dev/null @@ -1,296 +0,0 @@ -[ - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.CallerDataConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.CallerDataConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.ClassOfCallerConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.ContextNameConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.DateConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.ExtendedThrowableProxyConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.FileOfCallerConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.LevelConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.LineOfCallerConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.LineSeparatorConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.LocalSequenceNumberConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.LoggerConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.MDCConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.MarkerConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.MessageConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.MethodOfCallerConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.NopThrowableInformationConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.PrefixCompositeConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.PropertyConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.RelativeTimeConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.RootCauseFirstThrowableProxyConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.ThreadConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.ThrowableProxyConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.classic.pattern.color.HighlightingCompositeConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.core.pattern.IdentityCompositeConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.core.pattern.ReplacingCompositeConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.core.pattern.color.BlackCompositeConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.core.pattern.color.BlueCompositeConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.core.pattern.color.BoldBlueCompositeConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.core.pattern.color.BoldCyanCompositeConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.core.pattern.color.BoldGreenCompositeConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.core.pattern.color.BoldMagentaCompositeConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.core.pattern.color.BoldRedCompositeConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.core.pattern.color.BoldWhiteCompositeConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.core.pattern.color.BoldYellowCompositeConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.core.pattern.color.CyanCompositeConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.core.pattern.color.GrayCompositeConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.core.pattern.color.GreenCompositeConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.core.pattern.color.MagentaCompositeConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.core.pattern.color.RedCompositeConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.core.pattern.color.WhiteCompositeConverter", - "allPublicConstructors": true - }, - { - "condition": { - "typeReachable": "ch.qos.logback.classic.LoggerContext" - }, - "name": "ch.qos.logback.core.pattern.color.YellowCompositeConverter", - "allPublicConstructors": true - } -] diff --git a/settings.gradle.kts b/settings.gradle.kts index 42e5cd8b67527..15d05b08ff045 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -60,3 +60,14 @@ buildCache { removeUnusedEntriesAfterDays = buildCacheRetentionDays.toInt() } } + +pluginManagement { + repositories { + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("org.gradle.toolchains.foojay-resolver-convention").version("0.4.0") +}