Skip to content

Support JDKs more recent than 8 (or at least document this hard requirement) #825

@cortlepp

Description

@cortlepp

I installed btrace using sdk on an ubuntu system.

sdk install btrace 2.2.6

(small note on the side: if I don't specify a version here, it installs 2.2.0, which is not the latest version. Maybe the defaults have to be updated somewhere)

I also activated a recent JDK for my shell, for example by using one of the below:

 sdk use java 17.0.16-tem
 sdk use java 21.0.6-tem
 sdk use java 25.0.2-tem

If I then execute any btracec command, even just btracec --help, I get the following:

$ btracec --help
[main] WARN org.openjdk.btrace.runtime.BTraceRuntimes - Failed to load BTrace runtime implementation org.openjdk.btrace.runtime.BTraceRuntimeImpl_11$Factory
java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:74)
        at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502)
        at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486)
        at org.openjdk.btrace.runtime.BTraceRuntimes.loadFactory(BTraceRuntimes.java:31)
        at org.openjdk.btrace.runtime.BTraceRuntimes.<clinit>(BTraceRuntimes.java:17)
        at org.openjdk.btrace.runtime.BTraceRuntimeAccess.registerRuntimeAccessor(BTraceRuntimeAccess.java:245)
        at org.openjdk.btrace.runtime.BTraceRuntimeAccess.<clinit>(BTraceRuntimeAccess.java:104)
        at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized0(Native Method)
        at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized(Unsafe.java:1160)
        at java.base/jdk.internal.reflect.MethodHandleAccessorFactory.ensureClassInitialized(MethodHandleAccessorFactory.java:300)
        at java.base/jdk.internal.reflect.MethodHandleAccessorFactory.newFieldAccessor(MethodHandleAccessorFactory.java:140)
        at java.base/jdk.internal.reflect.ReflectionFactory.newFieldAccessor(ReflectionFactory.java:145)
        at java.base/java.lang.reflect.Field.acquireOverrideFieldAccessor(Field.java:1200)
        at java.base/java.lang.reflect.Field.getOverrideFieldAccessor(Field.java:1169)
        at java.base/java.lang.reflect.Field.set(Field.java:836)
        at org.openjdk.btrace.compiler.Compiler.main(Compiler.java:102)
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make static java.lang.Class java.lang.ClassLoader.findBootstrapClassOrNull(java.lang.String) accessible: module java.base does not "opens java.lang" to unnamed module @68de145
        at java.base/java.lang.reflect.AccessibleObject.throwInaccessibleObjectException(AccessibleObject.java:391)
        at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:367)
        at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:315)
        at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:203)
        at java.base/java.lang.reflect.Method.setAccessible(Method.java:197)
        at org.openjdk.btrace.runtime.BTraceRuntimeImpl_11.<init>(BTraceRuntimeImpl_11.java:98)
        at org.openjdk.btrace.runtime.BTraceRuntimeImpl_11$Factory.<init>(BTraceRuntimeImpl_11.java:63)
        at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62)
        ... 15 more
[main] WARN org.openjdk.btrace.runtime.BTraceRuntimes - Failed to load BTrace runtime implementation org.openjdk.btrace.runtime.BTraceRuntimeImpl_9$Factory
java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:74)
        at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502)
        at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486)
        at org.openjdk.btrace.runtime.BTraceRuntimes.loadFactory(BTraceRuntimes.java:31)
        at org.openjdk.btrace.runtime.BTraceRuntimes.<clinit>(BTraceRuntimes.java:18)
        at org.openjdk.btrace.runtime.BTraceRuntimeAccess.registerRuntimeAccessor(BTraceRuntimeAccess.java:245)
        at org.openjdk.btrace.runtime.BTraceRuntimeAccess.<clinit>(BTraceRuntimeAccess.java:104)
        at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized0(Native Method)
        at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized(Unsafe.java:1160)
        at java.base/jdk.internal.reflect.MethodHandleAccessorFactory.ensureClassInitialized(MethodHandleAccessorFactory.java:300)
        at java.base/jdk.internal.reflect.MethodHandleAccessorFactory.newFieldAccessor(MethodHandleAccessorFactory.java:140)
        at java.base/jdk.internal.reflect.ReflectionFactory.newFieldAccessor(ReflectionFactory.java:145)
        at java.base/java.lang.reflect.Field.acquireOverrideFieldAccessor(Field.java:1200)
        at java.base/java.lang.reflect.Field.getOverrideFieldAccessor(Field.java:1169)
        at java.base/java.lang.reflect.Field.set(Field.java:836)
        at org.openjdk.btrace.compiler.Compiler.main(Compiler.java:102)
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make static java.lang.Class java.lang.ClassLoader.findBootstrapClassOrNull(java.lang.String) accessible: module java.base does not "opens java.lang" to unnamed module @68de145
        at java.base/java.lang.reflect.AccessibleObject.throwInaccessibleObjectException(AccessibleObject.java:391)
        at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:367)
        at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:315)
        at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:203)
        at java.base/java.lang.reflect.Method.setAccessible(Method.java:197)
        at org.openjdk.btrace.runtime.BTraceRuntimeImpl_9.<init>(BTraceRuntimeImpl_9.java:94)
        at org.openjdk.btrace.runtime.BTraceRuntimeImpl_9$Factory.<init>(BTraceRuntimeImpl_9.java:61)
        at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62)
        ... 15 more
[main] WARN org.openjdk.btrace.runtime.BTraceRuntimes - Failed to load BTrace runtime implementation org.openjdk.btrace.runtime.BTraceRuntimeImpl_8$Factory
java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:74)
        at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502)
        at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486)
        at org.openjdk.btrace.runtime.BTraceRuntimes.loadFactory(BTraceRuntimes.java:31)
        at org.openjdk.btrace.runtime.BTraceRuntimes.<clinit>(BTraceRuntimes.java:19)
        at org.openjdk.btrace.runtime.BTraceRuntimeAccess.registerRuntimeAccessor(BTraceRuntimeAccess.java:245)
        at org.openjdk.btrace.runtime.BTraceRuntimeAccess.<clinit>(BTraceRuntimeAccess.java:104)
        at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized0(Native Method)
        at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized(Unsafe.java:1160)
        at java.base/jdk.internal.reflect.MethodHandleAccessorFactory.ensureClassInitialized(MethodHandleAccessorFactory.java:300)
        at java.base/jdk.internal.reflect.MethodHandleAccessorFactory.newFieldAccessor(MethodHandleAccessorFactory.java:140)
        at java.base/jdk.internal.reflect.ReflectionFactory.newFieldAccessor(ReflectionFactory.java:145)
        at java.base/java.lang.reflect.Field.acquireOverrideFieldAccessor(Field.java:1200)
        at java.base/java.lang.reflect.Field.getOverrideFieldAccessor(Field.java:1169)
        at java.base/java.lang.reflect.Field.set(Field.java:836)
        at org.openjdk.btrace.compiler.Compiler.main(Compiler.java:102)
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make static java.lang.Class java.lang.ClassLoader.findBootstrapClassOrNull(java.lang.String) accessible: module java.base does not "opens java.lang" to unnamed module @68de145
        at java.base/java.lang.reflect.AccessibleObject.throwInaccessibleObjectException(AccessibleObject.java:391)
        at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:367)
        at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:315)
        at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:203)
        at java.base/java.lang.reflect.Method.setAccessible(Method.java:197)
        at org.openjdk.btrace.runtime.BTraceRuntimeImpl_8.<init>(BTraceRuntimeImpl_8.java:105)
        at org.openjdk.btrace.runtime.BTraceRuntimeImpl_8$Factory.<init>(BTraceRuntimeImpl_8.java:57)
        at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62)
        ... 15 more
Usage: btracec <options> <btrace source files>
where possible options include:
  -classpath <path> Specify where to find user class files and annotation processors
  -cp <path>        Specify where to find user class files and annotation processors
  -I <path>         Specify where to find include files
  -d <directory>    Specify where to place generated class files
  -nopack           Do not produce packed probes. Useful when targeting pre 1.3.10 versions.
  -packext          File extension for script packs (default '.class'). Valid only if '-nopack' is not specified.
  -trusted          Enable trusted script (eg. no checks)

If I install jdk 8, the errors go away.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions