JabRef / jabref

Graphical Java application for managing BibTeX and biblatex (.bib) databases
https://devdocs.jabref.org
MIT License
3.55k stars 2.48k forks source link

Code length outside the allowed range during linking #10626

Closed Loara closed 6 months ago

Loara commented 10 months ago

JabRef version

5.11 (latest release)

Operating system

GNU / Linux

Details on version and operating system

Arch Linux (stable kernel 6.5.9.arch2-1)

Checked with the latest development build (copy version output from About dialog)

Steps to reproduce the behaviour

Just execute ./gradlew assemble and ./gradlew jlink at the latest commit in main with OpenJDK 21. The assemble task finishes without errors, however jlink task fails with the following message:

Error: java.lang.IllegalArgumentException: Code length 71614 is outside the allowed range in moduleDescriptors()ModuleDescriptor[]

> Task :jlink FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':jlink'.
> Process 'command '/usr/lib/jvm/java-21-openjdk/bin/jlink'' finished with non-zero exit value 1

Appendix

Log File ``` Providers: org.jabref provides com.airhacks.afterburner.injection.PresenterFactory used by afterburner.fx org.jabref provides com.airhacks.afterburner.views.ResourceLocator used by afterburner.fx com.fasterxml.jackson.dataformat.yaml provides com.fasterxml.jackson.core.JsonFactory not used by any observable module com.fasterxml.jackson.databind provides com.fasterxml.jackson.core.ObjectCodec used by com.fasterxml.jackson.core com.fasterxml.jackson.dataformat.yaml provides com.fasterxml.jackson.core.ObjectCodec used by com.fasterxml.jackson.core com.fasterxml.jackson.datatype.jsr310 provides com.fasterxml.jackson.databind.Module used by com.fasterxml.jackson.databind jdk.jdi provides com.sun.jdi.connect.Connector used by jdk.jdi jdk.attach provides com.sun.tools.attach.spi.AttachProvider used by jdk.attach jdk.javadoc provides com.sun.tools.doclint.DocLint used by jdk.compiler jdk.compiler provides com.sun.tools.javac.platform.PlatformProvider used by jdk.compiler org.eclipse.angus.activation provides jakarta.activation.spi.MailcapRegistryProvider used by jakarta.activation org.eclipse.angus.activation provides jakarta.activation.spi.MimeTypeRegistryProvider used by jakarta.activation java.desktop provides java.net.ContentHandlerFactory used by java.base jdk.charsets provides java.nio.charset.spi.CharsetProvider used by java.base java.base provides java.nio.file.spi.FileSystemProvider used by java.base jdk.zipfs provides java.nio.file.spi.FileSystemProvider used by java.base java.naming provides java.security.Provider used by java.base java.security.jgss provides java.security.Provider used by java.base java.security.sasl provides java.security.Provider used by java.base java.smartcardio provides java.security.Provider used by java.base java.xml.crypto provides java.security.Provider used by java.base jdk.crypto.cryptoki provides java.security.Provider used by java.base jdk.crypto.ec provides java.security.Provider used by java.base jdk.security.jgss provides java.security.Provider used by java.base org.jabref.merged.module provides java.security.Provider used by java.base org.jabref.merged.module provides java.sql.Driver used by java.sql java.base provides java.util.random.RandomGenerator used by java.base jdk.random provides java.util.random.RandomGenerator used by java.base jdk.compiler provides java.util.spi.ToolProvider used by java.base jdk.jartool provides java.util.spi.ToolProvider used by java.base jdk.javadoc provides java.util.spi.ToolProvider used by java.base jdk.jdeps provides java.util.spi.ToolProvider used by java.base jdk.jlink provides java.util.spi.ToolProvider used by java.base jdk.jpackage provides java.util.spi.ToolProvider used by java.base java.management.rmi provides javax.management.remote.JMXConnectorProvider used by java.management java.management.rmi provides javax.management.remote.JMXConnectorServerProvider used by java.management jdk.naming.dns provides javax.naming.spi.InitialContextFactory used by java.naming jdk.naming.rmi provides javax.naming.spi.InitialContextFactory used by java.naming java.desktop provides javax.print.PrintServiceLookup used by java.desktop java.desktop provides javax.print.StreamPrintServiceFactory used by java.desktop java.management provides javax.security.auth.spi.LoginModule used by java.base jdk.security.auth provides javax.security.auth.spi.LoginModule used by java.base java.desktop provides javax.sound.midi.spi.MidiDeviceProvider used by java.desktop java.desktop provides javax.sound.midi.spi.MidiFileReader used by java.desktop java.desktop provides javax.sound.midi.spi.MidiFileWriter used by java.desktop java.desktop provides javax.sound.midi.spi.SoundbankReader used by java.desktop java.desktop provides javax.sound.sampled.spi.AudioFileReader used by java.desktop java.desktop provides javax.sound.sampled.spi.AudioFileWriter used by java.desktop java.desktop provides javax.sound.sampled.spi.FormatConversionProvider used by java.desktop java.desktop provides javax.sound.sampled.spi.MixerProvider used by java.desktop jdk.javadoc provides javax.tools.DocumentationTool used by java.compiler jdk.compiler provides javax.tools.JavaCompiler used by java.compiler jdk.compiler provides javax.tools.Tool not used by any observable module jdk.javadoc provides javax.tools.Tool not used by any observable module jdk.jshell provides javax.tools.Tool not used by any observable module com.fasterxml.aalto provides javax.xml.stream.XMLEventFactory used by java.xml com.fasterxml.aalto provides javax.xml.stream.XMLInputFactory used by java.xml com.fasterxml.aalto provides javax.xml.stream.XMLOutputFactory used by java.xml jdk.editpad provides jdk.internal.editor.spi.BuildInEditorProvider used by jdk.jshell jdk.internal.le provides jdk.internal.io.JdkConsoleProvider used by java.base jdk.jshell provides jdk.internal.io.JdkConsoleProvider used by java.base java.logging provides jdk.internal.logger.DefaultLoggerFinder used by java.base jdk.jpackage provides jdk.jpackage.internal.Bundler used by jdk.jpackage jdk.jpackage provides jdk.jpackage.internal.Bundlers used by jdk.jpackage jdk.jshell provides jdk.jshell.spi.ExecutionControlProvider used by jdk.jshell jdk.jlink provides jdk.tools.jlink.plugin.Plugin used by jdk.jlink org.apache.lucene.analysis.common provides org.apache.lucene.analysis.CharFilterFactory used by org.apache.lucene.core org.apache.lucene.analysis.common provides org.apache.lucene.analysis.TokenFilterFactory used by org.apache.lucene.core org.apache.lucene.analysis.common provides org.apache.lucene.analysis.TokenizerFactory used by org.apache.lucene.core org.apache.lucene.core provides org.apache.lucene.analysis.TokenizerFactory used by org.apache.lucene.core org.apache.lucene.core provides org.apache.lucene.codecs.Codec used by org.apache.lucene.core org.apache.lucene.core provides org.apache.lucene.codecs.DocValuesFormat used by org.apache.lucene.core org.apache.lucene.core provides org.apache.lucene.codecs.KnnVectorsFormat used by org.apache.lucene.core org.apache.lucene.core provides org.apache.lucene.codecs.PostingsFormat used by org.apache.lucene.core org.apache.lucene.sandbox provides org.apache.lucene.codecs.PostingsFormat used by org.apache.lucene.core org.apache.lucene.core provides org.apache.lucene.index.SortFieldProvider used by org.apache.lucene.core org.freedesktop.dbus.transport.jre provides org.freedesktop.dbus.spi.transport.ITransportProvider used by org.freedesktop.dbus org.jabref provides org.kordamp.ikonli.IkonHandler used by org.jabref,org.kordamp.ikonli.core org.kordamp.ikonli.bootstrapicons provides org.kordamp.ikonli.IkonHandler used by org.jabref,org.kordamp.ikonli.core org.kordamp.ikonli.core provides org.kordamp.ikonli.IkonHandler used by org.jabref,org.kordamp.ikonli.core org.kordamp.ikonli.material provides org.kordamp.ikonli.IkonHandler used by org.jabref,org.kordamp.ikonli.core org.kordamp.ikonli.materialdesign provides org.kordamp.ikonli.IkonHandler used by org.jabref,org.kordamp.ikonli.core org.kordamp.ikonli.materialdesign2 provides org.kordamp.ikonli.IkonHandler used by org.jabref,org.kordamp.ikonli.core org.jabref provides org.kordamp.ikonli.IkonProvider used by org.jabref org.kordamp.ikonli.bootstrapicons provides org.kordamp.ikonli.IkonProvider used by org.jabref org.kordamp.ikonli.core provides org.kordamp.ikonli.IkonProvider used by org.jabref org.kordamp.ikonli.material provides org.kordamp.ikonli.IkonProvider used by org.jabref org.kordamp.ikonli.materialdesign provides org.kordamp.ikonli.IkonProvider used by org.jabref org.kordamp.ikonli.materialdesign2 provides org.kordamp.ikonli.IkonProvider used by org.jabref org.jabref.merged.module provides org.mariadb.jdbc.authentication.AuthenticationPlugin used by org.jabref.merged.module org.jabref.merged.module provides org.mariadb.jdbc.credential.CredentialPlugin used by org.jabref,org.jabref.merged.module org.jabref.merged.module provides org.mariadb.jdbc.tls.TlsSocketPlugin used by org.jabref.merged.module org.tinylog.api.slf4j provides org.slf4j.spi.SLF4JServiceProvider used by org.slf4j org.tinylog.impl provides org.tinylog.converters.FileConverter used by org.tinylog.impl org.tinylog.impl provides org.tinylog.policies.Policy used by org.tinylog.impl org.tinylog.impl provides org.tinylog.provider.LoggingProvider used by org.tinylog.api org.tinylog.impl provides org.tinylog.throwable.ThrowableFilter used by org.tinylog.impl org.jabref provides org.tinylog.writers.Writer used by org.tinylog.impl org.tinylog.impl provides org.tinylog.writers.Writer used by org.tinylog.impl java.desktop provides sun.datatransfer.DesktopDatatransferService used by java.datatransfer jdk.internal.jvmstat provides sun.jvmstat.monitor.MonitoredHostService used by jdk.internal.jvmstat jdk.jstatd provides sun.jvmstat.monitor.MonitoredHostService used by jdk.internal.jvmstat jdk.management provides sun.management.spi.PlatformMBeanProvider used by java.management jdk.management.jfr provides sun.management.spi.PlatformMBeanProvider used by java.management jdk.unsupported.desktop provides sun.swing.InteropProvider used by java.desktop jdk.localedata provides sun.util.locale.provider.LocaleDataMetaInfo used by java.base jdk.localedata provides sun.util.resources.LocaleData$CommonResourceBundleProvider used by java.base jdk.localedata provides sun.util.resources.LocaleData$SupplementaryResourceBundleProvider used by java.base Error: java.lang.IllegalArgumentException: Code length 71614 is outside the allowed range in moduleDescriptors()ModuleDescriptor[] > Task :jlink FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':jlink'. > Process 'command '/usr/lib/jvm/java-21-openjdk/bin/jlink'' finished with non-zero exit value 1 ```
Siedlerchr commented 10 months ago

Hi, you need OpenJDK version 21.0.1 because of the fixed jlink bug (see number 39 in the release notes) https://www.oracle.com/java/technologies/javase/21-0-1-relnotes.html

You also get the latest main version binaries always here https://builds.jabref.org/main/

Loara commented 10 months ago

I'm currently using OpenJDK 21 2023-09-19 build 21+35 (https://openjdk.org/projects/jdk/21/). Version 21.0.1 doesn't exist for OpenJDK but for Oracle JDK. The OpenJDK page for this bug (https://bugs.openjdk.org/browse/JDK-8240567) seems to say that the fix would be included only in OpenJDK 22 which is still in development.

Until the new version has been released, how can I manually build JabRef without running the jlink task and without relying on Oracle's proprietary version of JDK? I need it in order to create a package for Arch Linux that points to the latest commit of this repo.

Siedlerchr commented 10 months ago

@Loara The bug was fixed by us in jdk22 but backported to 21.0.1 .
You could use one of the alternative jdk provider, e.g. Eclipse Temurin https://aur.archlinux.org/packages/jdk-temurin that seems to be availabe in 21.0.1. Other option is to use the prebuilt binaries e.g. linux portable

Edit// Please also note that the latest main now requires minimum version of GTK 3.8, GTK2 got removed

koppor commented 10 months ago

I'm currently using OpenJDK 21 2023-09-19 build 21+35 (https://openjdk.org/projects/jdk/21/).

Please use a build of https://github.com/openjdk/jdk21u/.

Version 21.0.1 doesn't exist for OpenJDK but for Oracle JDK.

As @Siedlerchr pointed out, there is a temurin build available arch. How hard is it to use that one?

Loara commented 10 months ago

As @Siedlerchr pointed out, there is a temurin build available arch. How hard is it to use that one?

Because OpenJDK is the only Java build that is officially maintained by the Arch team, and i prefer to reduce at minimum AUR dependencies, but if this can't be achieved then I'll follow the @Siedlerchr's solution.

Siedlerchr commented 10 months ago

Maybe you can report/ask the maintainer that there is a newer version available https://archlinux.org/packages/extra/x86_64/jdk-openjdk/flag/

Paolo @.***> schrieb am Fr., 10. Nov. 2023, 12:12:

As @Siedlerchr https://github.com/Siedlerchr pointed out, there is a temurin build available arch. How hard is it to use that one?

Because OpenJDK is the only Java build that is officially maintained by the Arch team, and i prefer to reduce at minimum AUR dependencies, but if this can't be achieved then I'll follow the @Siedlerchr https://github.com/Siedlerchr's solution.

— Reply to this email directly, view it on GitHub https://github.com/JabRef/jabref/issues/10626#issuecomment-1805530421, or unsubscribe https://github.com/notifications/unsubscribe-auth/AACOFZCCPNDM7RD74HA5NFLYDYDYJAVCNFSM6AAAAAA7BMS2GGVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQMBVGUZTANBSGE . You are receiving this because you were mentioned.Message ID: @.***>

Siedlerchr commented 6 months ago

@Loara I just checked again and there is now openjdk 21.02 available jdk-openjdk 21.0.2.u13-3 [extra] (x86_64)

Therefore this should no longer be a problem