From ffbb564a1fa50c3f155a0df6ff28bcf5536b2963 Mon Sep 17 00:00:00 2001 From: Stephane Landelle Date: Thu, 2 Jun 2022 02:16:29 +0200 Subject: [PATCH 1/2] Fix incremental compiler not being able to find JDK classes when compiler macros with Java 11, close #502 Motivation: Jigsaw has changed the behavior of ClassLoaders. For some reason, ScalaCompilerLoader with a null parent is able to find JDK classes on Java 8 but not on Java 11. Modification: Make the parent the root loader. Result: We can compile macros with Java 11. --- src/main/java/scala_maven/ScalaCompilerLoader.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/scala_maven/ScalaCompilerLoader.java b/src/main/java/scala_maven/ScalaCompilerLoader.java index 9933ae17..d5010f01 100644 --- a/src/main/java/scala_maven/ScalaCompilerLoader.java +++ b/src/main/java/scala_maven/ScalaCompilerLoader.java @@ -16,6 +16,8 @@ package scala_maven; +import sbt.internal.inc.classpath.ClasspathUtil; + import java.net.URL; import java.net.URLClassLoader; @@ -25,7 +27,7 @@ public class ScalaCompilerLoader extends URLClassLoader { private final ClassLoader sbtLoader; public ScalaCompilerLoader(URL[] urls, ClassLoader sbtLoader) { - super(urls, null); + super(urls, ClasspathUtil.rootLoader()); this.sbtLoader = sbtLoader; } From 4bcf1b7438fe5af61dd03c44d00c6ca0e29fc427 Mon Sep 17 00:00:00 2001 From: Stephane Landelle Date: Thu, 2 Jun 2022 02:17:07 +0200 Subject: [PATCH 2/2] minor clean up --- src/main/java/scala_maven/ScalaCompilerSupport.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/scala_maven/ScalaCompilerSupport.java b/src/main/java/scala_maven/ScalaCompilerSupport.java index fc43f3d3..a1d89a0e 100644 --- a/src/main/java/scala_maven/ScalaCompilerSupport.java +++ b/src/main/java/scala_maven/ScalaCompilerSupport.java @@ -302,10 +302,9 @@ private ScalaInstance makeScalaInstance(Context sc) throws Exception { allJars.addAll(Arrays.asList(libraryJars)); File[] allJarFiles = allJars.toArray(new File[] {}); - URLClassLoader loaderLibraryOnly = + ClassLoader loaderLibraryOnly = new ScalaCompilerLoader(libraryJarUrls, xsbti.Reporter.class.getClassLoader()); - URLClassLoader loaderCompilerOnly = new URLClassLoader(compilerJarUrls, loaderLibraryOnly); - URLClassLoader loader = loaderCompilerOnly; + ClassLoader loaderCompilerOnly = new URLClassLoader(compilerJarUrls, loaderLibraryOnly); if (getLog().isDebugEnabled()) { getLog().debug("compilerJars: " + FileUtils.toMultiPath(compilerJars)); @@ -314,7 +313,7 @@ private ScalaInstance makeScalaInstance(Context sc) throws Exception { return new ScalaInstance( sc.version().toString(), - loader, + loaderCompilerOnly, loaderCompilerOnly, loaderLibraryOnly, libraryJars,