HHH-14657 Use the compile instead of runtime classpath

The runtime classpath contains the dependencies as jars that are not yet built when the plugin needs them. So use the compile classpath plus the compiled classes of the current project.
This commit is contained in:
Markus Heiden 2021-06-22 10:03:10 +02:00 committed by Sanne Grinovero
parent 1176198873
commit 0c37ab3a16
1 changed files with 15 additions and 8 deletions

View File

@ -37,7 +37,12 @@ import org.hibernate.cfg.Environment;
*/
public class EnhancementHelper {
static void enhance(SourceSet sourceSet, EnhanceExtension options, Project project) {
final ClassLoader classLoader = toClassLoader( sourceSet.getRuntimeClasspath() );
// The compile classpath contains the jar dependencies and
// the output directories with the compiled classes of project dependencies in a multi-project build.
// The classes directories contain the compiled classes of this project.
// The runtime classpath cannot be used for this purpose
// because it contains the jars of project dependencies which are not yet built.
final ClassLoader classLoader = toClassLoader( sourceSet.getCompileClasspath(), sourceSet.getOutput().getClassesDirs() );
final EnhancementContext enhancementContext = new DefaultEnhancementContext() {
@Override
@ -96,14 +101,16 @@ public class EnhancementHelper {
}
}
public static ClassLoader toClassLoader(FileCollection runtimeClasspath) {
public static ClassLoader toClassLoader(FileCollection... classpaths) {
List<URL> urls = new ArrayList<>();
for ( File file : runtimeClasspath ) {
try {
urls.add( file.toURI().toURL() );
}
catch (MalformedURLException e) {
throw new GradleException( "Unable to resolve classpath entry to URL : " + file.getAbsolutePath(), e );
for ( FileCollection classpath : classpaths ) {
for ( File file : classpath ) {
try {
urls.add( file.toURI().toURL() );
}
catch (MalformedURLException e) {
throw new GradleException( "Unable to resolve classpath entry to URL : " + file.getAbsolutePath(), e );
}
}
}
return new URLClassLoader( urls.toArray( new URL[0] ), Enhancer.class.getClassLoader() );