Native compile [GraalVM]
Howto
- Run gradle task
nativeCompile.
Mandatory checks
- [ ] Change in
CHANGELOG.mddescribed in a way that is understandable for the average user (if applicable) - [ ] Tests created for changes (if applicable)
- [ ] Manually tested changed features in running JabRef (always required)
- [ ] Screenshots added in PR description (for UI changes)
- [ ] Checked developer's documentation: Is the information available and up to date? If not, I outlined it in this pull request.
- [ ] Checked documentation: Is the information available and up to date? If not, I created an issue at https://github.com/JabRef/user-documentation/issues or, even better, I submitted a pull request to the documentation repository.
Caused by: java.lang.module.InvalidModuleDescriptorException: Unsupported major.minor version 66.0
Caused by: java.lang.module.InvalidModuleDescriptorException: Unsupported major.minor version 66.0
Uhoh. I went back to Java 21 in d39fb35 (#11298), because I didn't know why Java 22 should be important at this point in time.
With Java 21, the image compiles fine, but cannot be started:
koppor@DESKTOP-KAK953S MINGW64 /c/git-repositories/jabref/build/native/nativeCompile (nativecompile)
$ ./JAbRef.exe
Messages are not initialized before accessing key: Display help on command line options
LOGGER ERROR: Service implementation 'org.tinylog.writers.ConsoleWriter' has no matching constructor
Exception in thread "main" java.lang.NullPointerException
at org.jabref.logic.l10n.Localization.lookup(Localization.java:146)
at org.jabref.logic.l10n.Localization.lang(Localization.java:58)
at org.jabref.cli.JabRefCLI.getOptions(JabRefCLI.java:184)
at org.jabref.cli.JabRefCLI.<init>(JabRefCLI.java:33)
at org.jabref.Launcher.main(Launcher.java:59)
at [email protected]/java.lang.invoke.LambdaForm$DMH/sa346b79c.invokeStaticInit(LambdaForm$DMH)
Current hint:
// Source: https://github.com/tinylog-org/tinylog/issues/145#issuecomment-603430594
task generateConfiguration(type: Exec) {
group = "graal"
description = "Run application to generate the configuration for native image"
dependsOn build
commandLine project.gradle.gradleUserHomeDir.toPath().resolve("caches/com.palantir.graal/$graalVmVersion/graalvm-ce-$graalVmVersion/bin/java"), "-agentlib:native-image-agent=config-output-dir=" + project.buildDir.toPath().resolve("resources/main/META-INF/native-image"), "-cp", sourceSets.main.runtimeClasspath.getAsPath(), javaMainClass
doFirst {
mkdir project.buildDir.toPath().resolve("resources/main/META-INF/native-image")
}
}
Current hint
Requires palantir graal plugin for gradle
Current hint
Requires palantir graal plugin for gradle
I don't think so. The path starts with plantir, but the content seems to be the real GraalVM. Thus, the paths "just" need to ne adapted to recent GraalVM.
MWE project to try out a fix: https://github.com/shoneslab/graal-logging (referenced from https://github.com/tinylog-org/tinylog/issues/145#issuecomment-602885335)
This needs to be adressed: https://github.com/oracle/graal/issues/7682
https://thenewstack.io/how-to-build-with-graalvm-inside-github-actions/
https://thenewstack.io/how-to-build-with-graalvm-inside-github-actions/
Doesn't use Toolchain. Think, we already managed to compile using GraalVM, but have issues with our file access
Tinylog "official" "guide": https://github.com/tinylog-org/tinylog-graal-example
The build of this PR is available at https://builds.jabref.org/pull/11298/merge.
Current error:
Error: Error loading a referenced type: com.oracle.svm.hosted.substitute.DeletedElementException: Unsupported method jdk.internal.loader.NativeLibrary.findEntry0(long, String) is reachable
To diagnose the issue, you can add the option --report-unsupported-elements-at-runtime. The unsupported element is then reported at run time when it is accessed the first time.
Error encountered while parsing org.apache.lucene.store.PosixNativeAccess.lookupMadvise(PosixNativeAccess.java:87)
Parsing context:
141 types, 103 fields, and 138 methods registered for JNI access
5 native libraries: crypt32, ncrypt, psapi, version, winhttp
------------------------------------------------------------------------------------------------------------------------
at org.apache.lucene.store.PosixNativeAccess.<clinit>(PosixNativeAccess.java:67)
at static root method.(Unknown Source)
Might be related https://github.com/oracle/graal/issues/673
https://www.graalvm.org/22.0/reference-manual/native-image/JNI/
https://github.com/amahfouz1/jna-graalvm
At https://github.com/JabRef/jabref/pull/11510, we even introduced more reflection.
Closing and re-opening at koppor, because it will take more time.