java.lang.IllegalArgumentException 从方法中引用在 class 加载程序中不可见
java.lang.IllegalArgumentException referenced from a method is not visible from class loader
当 wsimport 在 /target/class/..... 和 运行 spring 带有 devtools 的启动应用程序中为 WS 服务生成存根时,我得到了一个异常。
Caused by: java.lang.IllegalArgumentException: com....Service referenced from a method is not visible from class loader
我发现 spring devtools class 加载程序 RestartClassLoader 存在问题,因为对 Class (重启ClassLoader和AppClassLoader)
private static void ensureVisible(ClassLoader ld, Class<?> c) {
Class<?> type = null;
try {
type = Class.forName(c.getName(), false, ld);
} catch (ClassNotFoundException e) {
if (type != c) {
throw new IllegalArgumentException(c.getName() +
" referenced from a method is not visible from class loader");
}
}
}
我试图将对 spring-devtools.properties 中的 jar 文件的引用添加到 restart.include=/.....jar
Spring Boot 2.0.0.RELEASE Java 9
因为它们是生成的 classes 你必须从 Spring Devtools "restart" classloader.
中排除它们
- 创建
/src/main/resources/META-INF/spring-devtools.properties
文件
添加像restart.exclude.*
这样的属性来排除classes重新启动classloader(例如,你可以使用restart.exclude.mygeneratedclasses=/*[generated]*.class
来排除所有classes 带有 generated
单词作为包或 class 名称的一部分)
完成。现在您可以使用 devtools 并且生成的 WS 没有问题 classes.
参考:
[1] https://github.com/spring-projects/spring-boot/issues/4529
或者简单地删除 Spring 开发工具依赖项,如果这不会影响您的应用程序:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
当 wsimport 在 /target/class/..... 和 运行 spring 带有 devtools 的启动应用程序中为 WS 服务生成存根时,我得到了一个异常。
Caused by: java.lang.IllegalArgumentException: com....Service referenced from a method is not visible from class loader
我发现 spring devtools class 加载程序 RestartClassLoader 存在问题,因为对 Class (重启ClassLoader和AppClassLoader)
private static void ensureVisible(ClassLoader ld, Class<?> c) {
Class<?> type = null;
try {
type = Class.forName(c.getName(), false, ld);
} catch (ClassNotFoundException e) {
if (type != c) {
throw new IllegalArgumentException(c.getName() +
" referenced from a method is not visible from class loader");
}
}
}
我试图将对 spring-devtools.properties 中的 jar 文件的引用添加到 restart.include=/.....jar
Spring Boot 2.0.0.RELEASE Java 9
因为它们是生成的 classes 你必须从 Spring Devtools "restart" classloader.
中排除它们- 创建
/src/main/resources/META-INF/spring-devtools.properties
文件 添加像
restart.exclude.*
这样的属性来排除classes重新启动classloader(例如,你可以使用restart.exclude.mygeneratedclasses=/*[generated]*.class
来排除所有classes 带有generated
单词作为包或 class 名称的一部分)完成。现在您可以使用 devtools 并且生成的 WS 没有问题 classes.
参考:
[1] https://github.com/spring-projects/spring-boot/issues/4529
或者简单地删除 Spring 开发工具依赖项,如果这不会影响您的应用程序:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>