Support -H:+CompatibilityMode in build tools#822
Conversation
a68e069 to
e678a1f
Compare
53f7072 to
f999bc4
Compare
ab9142b to
bcf620c
Compare
jormundur00
left a comment
There was a problem hiding this comment.
Currently, all the tests fail due to the missing -H:+CompatibilityMode option, so I believe we should at least wait until it exists in the latest GraalVM JDK.
Other than that, when locally running with a JDK that has this option, both the gradle and maven tests fail with:
> Task :nativeTest
FAILED
7 actionable tasks: 7 executed
CompatibilityModeNativeTestsFunctionalTest > ON via NATIVE_IMAGE_OPTIONS env map: native test image build/run are skipped and message logged FAILED
org.spockframework.runtime.ConditionFailedWithExceptionError at CompatibilityModeNativeTestsFunctionalTest.groovy:107
Caused by: org.codehaus.groovy.runtime.powerassert.PowerAssertionError at CompatibilityModeNativeTestsFunctionalTest.groovy:108
which, if I understand the point of this PR, is because nativeTest should be skipped and isn't?
| import spock.lang.Requires | ||
| import spock.lang.Specification | ||
|
|
||
| @Requires({ JavaVersion.current().isCompatibleWith(JavaVersion.toVersion(25)) }) |
There was a problem hiding this comment.
This points to the JAVA_HOME used by the gradle wrapper, and not the GRAALVM_HOME, so the tests get skipped when attempting to run with JAVA_HOME set as JDK 17 (for the gradle), and GRAALVM_HOME set as JDK 25 (for the image build). I think we should use @Requires({ NativeImageUtils.getMajorJDKVersion(GraalVMSupport.getGraalVMHomeVersionString()) >= 25 }) like it's done in LayeredApplicationFunctionalTest here (also to stay consistent with the Maven test. that runs properly with this setup).
There was a problem hiding this comment.
I removed all the tests for now.
bcf620c to
2182f42
Compare
In compatibility mode JUnit tests are executed like on the JVM.
2182f42 to
0631241
Compare
…1.4 to 0.11.5 [skip ci] Bumps [org.graalvm.buildtools:native-maven-plugin](https://github.com/graalvm/native-build-tools) from 0.11.4 to 0.11.5. Release notes *Sourced from [org.graalvm.buildtools:native-maven-plugin's releases](https://github.com/graalvm/native-build-tools/releases).* > 0.11.5 > ------ > > What's Changed > -------------- > > * Bump version to 0.11.5-SNAPSHOT by [`@graalvmbot`](https://github.com/graalvmbot) in [graalvm/native-build-tools#817](https://redirect.github.com/graalvm/native-build-tools/pull/817) > * Make environment variables set in the pom.xml of the native-maven-plugin be visible in the image builder by [`@jormundur00`](https://github.com/jormundur00) in [graalvm/native-build-tools#819](https://redirect.github.com/graalvm/native-build-tools/pull/819) > * Add check if correct schemas are present in the reachability metadata repository provided to buildtools by [`@jormundur00`](https://github.com/jormundur00) in [graalvm/native-build-tools#821](https://redirect.github.com/graalvm/native-build-tools/pull/821) > * Add fallback for jarless artifacts in the native-maven-plugin by [`@jormundur00`](https://github.com/jormundur00) in [graalvm/native-build-tools#824](https://redirect.github.com/graalvm/native-build-tools/pull/824) > * Fix JUnit 6 not working correctly with JDK 21 by expanding the initialize-at-build-time-list by [`@jormundur00`](https://github.com/jormundur00) in [graalvm/native-build-tools#832](https://redirect.github.com/graalvm/native-build-tools/pull/832) > * Remove the usage of the global metadata/index.json from the nbt plugins by [`@jormundur00`](https://github.com/jormundur00) in [graalvm/native-build-tools#829](https://redirect.github.com/graalvm/native-build-tools/pull/829) > * Revert "Remove the usage of the global metadata/index.json from the nbt plugins" by [`@jormundur00`](https://github.com/jormundur00) in [graalvm/native-build-tools#836](https://redirect.github.com/graalvm/native-build-tools/pull/836) > * Use JDK 21 Graal in the CI by [`@jormundur00`](https://github.com/jormundur00) in [graalvm/native-build-tools#839](https://redirect.github.com/graalvm/native-build-tools/pull/839) > * Support `-H:+CompatibilityMode` in build tools by [`@vjovanov`](https://github.com/vjovanov) in [graalvm/native-build-tools#822](https://redirect.github.com/graalvm/native-build-tools/pull/822) > * Update reachability metadata to 0.3.34 by [`@graalvmbot`](https://github.com/graalvmbot) in [graalvm/native-build-tools#842](https://redirect.github.com/graalvm/native-build-tools/pull/842) > > **Full Changelog**: <graalvm/native-build-tools@0.11.4...0.11.5> Commits * [`ffd094d`](graalvm/native-build-tools@ffd094d) Release 0.11.5 * [`1d7c2f7`](graalvm/native-build-tools@1d7c2f7) Merge pull request [#842](https://redirect.github.com/graalvm/native-build-tools/issues/842) from graalvm/update-metadata-to-0.3.34 * [`ba1c2e8`](graalvm/native-build-tools@ba1c2e8) Update reachability metadata to 0.3.34 * [`790fa05`](graalvm/native-build-tools@790fa05) Merge pull request [#822](https://redirect.github.com/graalvm/native-build-tools/issues/822) from graalvm/vj/compatibility-mode * [`0631241`](graalvm/native-build-tools@0631241) Implement Compatibility Mode detection * [`1844654`](graalvm/native-build-tools@1844654) Use JDK 21 Graal in the CI ([#839](https://redirect.github.com/graalvm/native-build-tools/issues/839)) * [`6315677`](graalvm/native-build-tools@6315677) Revert "Remove the usage of the global metadata/index.json from the nbt plugi... * [`fe065ce`](graalvm/native-build-tools@fe065ce) Remove the usage of the global metadata/index.json from the nbt plugins ([#829](https://redirect.github.com/graalvm/native-build-tools/issues/829)) * [`94b5b54`](graalvm/native-build-tools@94b5b54) Fix JUnit 6 not working correctly with JDK 21 by expanding the initialize-at-... * [`086cfdf`](graalvm/native-build-tools@086cfdf) Add fallback for jarless artifacts in the native-maven-plugin ([#824](https://redirect.github.com/graalvm/native-build-tools/issues/824)) * Additional commits viewable in [compare view](graalvm/native-build-tools@0.11.4...0.11.5) [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- Dependabot commands and options You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
When the Native Image Compatibility Mode flag is enabled (
-H:+CompatibilityMode), the Maven native test goal is automatically short-circuited: native-image based JUnit tests are skipped and tests run on the JVM via Surefire/Failsafe instead.What happens
-H:+CompatibilityModeis detected, thenative:testgoal is skipped early and JVM tests execute (Surefire/Failsafe).Detection sources
-DbuildArgs=...).NATIVE_IMAGE_OPTIONS:<environmentVariables>NATIVE_IMAGE_OPTIONS</environmentVariables>).Behavior details
How to trigger and verify
mvn -Pnative -DbuildArgs=-H:+CompatibilityMode testNATIVE_IMAGE_OPTIONS:NATIVE_IMAGE_OPTIONSin the Surefire/Failsafe plugin environment within the POM.Resetting back to native tests
-H:+CompatibilityModefrom build args and ensureNATIVE_IMAGE_OPTIONSdoes not contain it.