From ebf3b4730550d68a3443a8c7ebf47f2b2b08d7f0 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Thu, 28 Sep 2017 17:38:05 +0100 Subject: [PATCH] Make ExtendedGroovyClassLoader compatible with Java 9 Closes gh-10445 --- .../boot/cli/compiler/ExtendedGroovyClassLoader.java | 7 +++++-- .../boot/cli/compiler/ExtendedGroovyClassLoaderTests.java | 8 +++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/spring-boot-cli/src/main/java/org/springframework/boot/cli/compiler/ExtendedGroovyClassLoader.java b/spring-boot-cli/src/main/java/org/springframework/boot/cli/compiler/ExtendedGroovyClassLoader.java index 9e0004f161c..35216e7ddd7 100644 --- a/spring-boot-cli/src/main/java/org/springframework/boot/cli/compiler/ExtendedGroovyClassLoader.java +++ b/spring-boot-cli/src/main/java/org/springframework/boot/cli/compiler/ExtendedGroovyClassLoader.java @@ -175,7 +175,8 @@ public class ExtendedGroovyClassLoader extends GroovyClassLoader { DefaultScopeParentClassLoader(ClassLoader parent) { super(parent); - this.groovyOnlyClassLoader = new URLClassLoader(getGroovyJars(parent), null); + this.groovyOnlyClassLoader = new URLClassLoader(getGroovyJars(parent), + parent.getParent()); } private URL[] getGroovyJars(final ClassLoader parent) { @@ -232,7 +233,9 @@ public class ExtendedGroovyClassLoader extends GroovyClassLoader { @Override protected Class loadClass(String name, boolean resolve) throws ClassNotFoundException { - this.groovyOnlyClassLoader.loadClass(name); + if (!name.startsWith("java.")) { + this.groovyOnlyClassLoader.loadClass(name); + } return super.loadClass(name, resolve); } diff --git a/spring-boot-cli/src/test/java/org/springframework/boot/cli/compiler/ExtendedGroovyClassLoaderTests.java b/spring-boot-cli/src/test/java/org/springframework/boot/cli/compiler/ExtendedGroovyClassLoaderTests.java index ceba736beaf..bcc9294a19b 100644 --- a/spring-boot-cli/src/test/java/org/springframework/boot/cli/compiler/ExtendedGroovyClassLoaderTests.java +++ b/spring-boot-cli/src/test/java/org/springframework/boot/cli/compiler/ExtendedGroovyClassLoaderTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2016 the original author or authors. + * Copyright 2012-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -64,4 +64,10 @@ public class ExtendedGroovyClassLoaderTests { this.defaultScopeGroovyClassLoader.loadClass("java.lang.Boolean"); } + @Test + public void loadsSqlTypes() throws Exception { + this.contextClassLoader.loadClass("java.sql.SQLException"); + this.defaultScopeGroovyClassLoader.loadClass("java.sql.SQLException"); + } + }