jabref icon indicating copy to clipboard operation
jabref copied to clipboard

Code length outside the allowed range during linking

Open Loara opened this issue 1 year ago • 6 comments

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)

  • [X] I made a backup of my libraries before testing the latest development version.
  • [X] I have tested the latest development version and the problem persists

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

Loara avatar Nov 07 '23 15:11 Loara

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/

Siedlerchr avatar Nov 07 '23 21:11 Siedlerchr

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.

Loara avatar Nov 08 '23 14:11 Loara

@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

Siedlerchr avatar Nov 08 '23 15:11 Siedlerchr

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?

koppor avatar Nov 08 '23 17:11 koppor

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.

Loara avatar Nov 10 '23 11:11 Loara

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 avatar Nov 10 '23 16:11 Siedlerchr

@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

Siedlerchr avatar Feb 27 '24 18:02 Siedlerchr