相关疑难解决方法(0)

如何解决InaccessibleObjectException("无法使{member}可访问:模块{A}在Java 9上没有'打开{package}'到{B}")?

在Java 9上运行应用程序时,在各种情况下都会发生此异常.某些库和框架(Spring,Hibernate,JAXB)特别容易出现这种情况.这是Javassist的一个例子:

java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @1941a8ff
    at java.base/jdk.internal.reflect.Reflection.throwInaccessibleObjectException(Reflection.java:427)
    at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:201)
    at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:192)
    at java.base/java.lang.reflect.Method.setAccessible(Method.java:186)
    at javassist.util.proxy.SecurityActions.setAccessible(SecurityActions.java:102)
    at javassist.util.proxy.FactoryHelper.toClass2(FactoryHelper.java:180)
    at javassist.util.proxy.FactoryHelper.toClass(FactoryHelper.java:163)
    at javassist.util.proxy.ProxyFactory.createClass3(ProxyFactory.java:501)
    at javassist.util.proxy.ProxyFactory.createClass2(ProxyFactory.java:486)
    at javassist.util.proxy.ProxyFactory.createClass1(ProxyFactory.java:422)
    at javassist.util.proxy.ProxyFactory.createClass(ProxyFactory.java:394)
Run Code Online (Sandbox Code Playgroud)

消息说:

无法使受保护的最终java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte [],int,int,java.security.ProtectionDomain)抛出java.lang.ClassFormatError可访问:module java.base没有"打开java.lang"到未命名的模块@ 1941a8ff

可以做些什么来避免异常并使程序成功运行?

java reflection java-9

52
推荐指数
9
解决办法
2万
查看次数

如何在Java 9上运行jol?

我正在尝试使用jolJava 9 运行程序,但没有运气.

我有以下依赖pom.xml:

<dependency>
    <groupId>org.openjdk.jol</groupId>
    <artifactId>jol-core</artifactId>
    <version>0.9</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

该计划很简单:

package org.example;

import org.openjdk.jol.vm.VM;

public class Example {
    public static void main(String[] args) throws Throwable {
        System.out.println(VM.current().details());
    }
}
Run Code Online (Sandbox Code Playgroud)

模块描述符:

module java9 {
    requires jol.core;
}
Run Code Online (Sandbox Code Playgroud)

当我从IDEA运行程序时,我看到以下输出:

# WARNING: Unable to get Instrumentation. Dynamic Attach failed.
You may add this JAR as -javaagent manually, or supply -Djdk.attach.allowAttachSelf
Run Code Online (Sandbox Code Playgroud)

-Djdk.attach.allowAttachSelf=true在IDEA中添加了VM参数,但它没有帮助(仍然是相同的输出).

PS我可以从类路径成功运行程序.尽管如此,如何从模块路径运行它仍然很有趣.

java jol java-9

6
推荐指数
1
解决办法
694
查看次数

标签 统计

java ×2

java-9 ×2

jol ×1

reflection ×1