|
16 | 16 |
|
17 | 17 | package org.springframework.boot.gradle.plugin;
|
18 | 18 |
|
| 19 | +import java.util.LinkedHashSet; |
| 20 | +import java.util.Set; |
| 21 | +import java.util.stream.Collectors; |
| 22 | + |
19 | 23 | import org.graalvm.buildtools.gradle.NativeImagePlugin;
|
20 | 24 | import org.graalvm.buildtools.gradle.dsl.GraalVMExtension;
|
21 | 25 | import org.graalvm.buildtools.gradle.dsl.GraalVMReachabilityMetadataRepositoryExtension;
|
22 | 26 | import org.gradle.api.Action;
|
23 | 27 | import org.gradle.api.Plugin;
|
24 | 28 | import org.gradle.api.Project;
|
| 29 | +import org.gradle.api.artifacts.Configuration; |
25 | 30 | import org.gradle.api.plugins.ExtensionAware;
|
26 | 31 | import org.gradle.api.plugins.JavaPlugin;
|
27 | 32 | import org.gradle.api.plugins.JavaPluginExtension;
|
@@ -53,20 +58,33 @@ public void execute(Project project) {
|
53 | 58 | JavaPluginExtension javaPluginExtension = project.getExtensions().getByType(JavaPluginExtension.class);
|
54 | 59 | SourceSetContainer sourceSets = javaPluginExtension.getSourceSets();
|
55 | 60 | GraalVMExtension graalVmExtension = configureGraalVmExtension(project);
|
56 |
| - configureNativeBinaryClasspath(sourceSets, graalVmExtension, NativeImagePlugin.NATIVE_MAIN_EXTENSION, |
57 |
| - SpringBootAotPlugin.AOT_SOURCE_SET_NAME); |
58 |
| - configureNativeBinaryClasspath(sourceSets, graalVmExtension, NativeImagePlugin.NATIVE_TEST_EXTENSION, |
| 61 | + configureMainNativeBinaryClasspath(project, sourceSets, graalVmExtension); |
| 62 | + configureTestNativeBinaryClasspath(sourceSets, graalVmExtension, |
59 | 63 | SpringBootAotPlugin.AOT_TEST_SOURCE_SET_NAME);
|
60 | 64 | configureGraalVmReachabilityExtension(graalVmExtension);
|
61 | 65 | copyReachabilityMetadataToBootJar(project);
|
62 | 66 | configureBootBuildImageToProduceANativeImage(project);
|
63 | 67 | });
|
64 | 68 | }
|
65 | 69 |
|
66 |
| - private void configureNativeBinaryClasspath(SourceSetContainer sourceSets, GraalVMExtension graalVmExtension, |
67 |
| - String binaryName, String sourceSetName) { |
68 |
| - SourceSetOutput output = sourceSets.getByName(sourceSetName).getOutput(); |
69 |
| - graalVmExtension.getBinaries().getByName(binaryName).classpath(output); |
| 70 | + private void configureMainNativeBinaryClasspath(Project project, SourceSetContainer sourceSets, |
| 71 | + GraalVMExtension graalVmExtension) { |
| 72 | + SourceSetOutput output = sourceSets.getByName(SpringBootAotPlugin.AOT_SOURCE_SET_NAME).getOutput(); |
| 73 | + graalVmExtension.getBinaries().getByName(NativeImagePlugin.NATIVE_MAIN_EXTENSION).classpath(output); |
| 74 | + Configuration nativeImageClasspath = project.getConfigurations().getByName("nativeImageClasspath"); |
| 75 | + nativeImageClasspath.setExtendsFrom(removeDevelopmentOnly(nativeImageClasspath.getExtendsFrom())); |
| 76 | + } |
| 77 | + |
| 78 | + private Iterable<Configuration> removeDevelopmentOnly(Set<Configuration> configurations) { |
| 79 | + return configurations.stream().filter(( |
| 80 | + configuration) -> !SpringBootPlugin.DEVELOPMENT_ONLY_CONFIGURATION_NAME.equals(configuration.getName())) |
| 81 | + .collect(Collectors.toCollection(LinkedHashSet::new)); |
| 82 | + } |
| 83 | + |
| 84 | + private void configureTestNativeBinaryClasspath(SourceSetContainer sourceSets, GraalVMExtension graalVmExtension, |
| 85 | + String sourceSetName) { |
| 86 | + SourceSetOutput output = sourceSets.getByName(SpringBootAotPlugin.AOT_TEST_SOURCE_SET_NAME).getOutput(); |
| 87 | + graalVmExtension.getBinaries().getByName(NativeImagePlugin.NATIVE_TEST_EXTENSION).classpath(output); |
70 | 88 | }
|
71 | 89 |
|
72 | 90 | private GraalVMExtension configureGraalVmExtension(Project project) {
|
|
0 commit comments