From 5e68bece96f3e5285d7e36186e80f53648c736b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lazar=20Mitrovi=C4=87?= Date: Fri, 10 Jun 2022 11:36:26 +0200 Subject: [PATCH] Fix review feedback --- .../workflows/test-native-gradle-plugin.yml | 2 +- .../internal/BaseNativeImageOptions.java | 4 +- .../NativeImageCommandLineProvider.java | 52 +++++++++++-------- .../gradle/tasks/BuildNativeImageTask.java | 3 +- 4 files changed, 33 insertions(+), 28 deletions(-) diff --git a/.github/workflows/test-native-gradle-plugin.yml b/.github/workflows/test-native-gradle-plugin.yml index 7b8aed887..2e6ceefdc 100644 --- a/.github/workflows/test-native-gradle-plugin.yml +++ b/.github/workflows/test-native-gradle-plugin.yml @@ -53,7 +53,7 @@ jobs: strategy: fail-fast: false matrix: - gradle-version: ["current", "7.3.3", "6.7.1"] + gradle-version: ["current", "7.3.3", "7.2", "7.1", "6.8.3", "6.7.1"] graalvm-version: [ dev ] java-version: [ 11 ] os: [ ubuntu-20.04 ] diff --git a/native-gradle-plugin/src/main/java/org/graalvm/buildtools/gradle/internal/BaseNativeImageOptions.java b/native-gradle-plugin/src/main/java/org/graalvm/buildtools/gradle/internal/BaseNativeImageOptions.java index 2900887b3..3c0ce2777 100644 --- a/native-gradle-plugin/src/main/java/org/graalvm/buildtools/gradle/internal/BaseNativeImageOptions.java +++ b/native-gradle-plugin/src/main/java/org/graalvm/buildtools/gradle/internal/BaseNativeImageOptions.java @@ -205,8 +205,8 @@ public String getName() { /** * Returns the MapProperty that contains information about configuration that should be excluded - * during image building. It consists of a dependency coordinates and a list of - * regular expressions that match resources that should be excluded as a value. + * during image building. It consists of dependency coordinates and a list of + * regular expressions that match resources that should be excluded. * * @return a map of filters for configuration exclusion */ diff --git a/native-gradle-plugin/src/main/java/org/graalvm/buildtools/gradle/internal/NativeImageCommandLineProvider.java b/native-gradle-plugin/src/main/java/org/graalvm/buildtools/gradle/internal/NativeImageCommandLineProvider.java index a5018ffa0..c1ff03910 100644 --- a/native-gradle-plugin/src/main/java/org/graalvm/buildtools/gradle/internal/NativeImageCommandLineProvider.java +++ b/native-gradle-plugin/src/main/java/org/graalvm/buildtools/gradle/internal/NativeImageCommandLineProvider.java @@ -43,8 +43,8 @@ import org.graalvm.buildtools.gradle.dsl.NativeImageOptions; import org.graalvm.buildtools.utils.NativeImageUtils; -import org.gradle.api.Project; import org.gradle.api.Transformer; +import org.gradle.api.artifacts.Configuration; import org.gradle.api.artifacts.component.ModuleComponentIdentifier; import org.gradle.api.file.FileSystemLocation; import org.gradle.api.file.RegularFile; @@ -58,6 +58,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Set; import java.util.stream.Collectors; public class NativeImageCommandLineProvider implements CommandLineArgumentProvider { @@ -68,20 +69,17 @@ public class NativeImageCommandLineProvider implements CommandLineArgumentProvid private final Provider outputDirectory; private final Provider classpathJar; private final Provider useArgFile; - private final Project project; public NativeImageCommandLineProvider(Provider options, Provider executableName, Provider outputDirectory, Provider classpathJar, - Provider useArgFile, - Project project) { + Provider useArgFile) { this.options = options; this.executableName = executableName; this.outputDirectory = outputDirectory; this.classpathJar = classpathJar; this.useArgFile = useArgFile; - this.project = project; } @Nested @@ -108,24 +106,32 @@ private List buildExcludeConfigArgs(NativeImageOptions options) { List args = new ArrayList<>(); options.getExcludeConfig().get().forEach((dependency, listOfResourcePatterns) -> { // Resolve jar for this dependency. - project.getConfigurations().getByName("runtimeClasspath").getIncoming().artifactView(view -> { - view.setLenient(true); - view.componentFilter(id -> { - if (id instanceof ModuleComponentIdentifier) { - ModuleComponentIdentifier mid = (ModuleComponentIdentifier) id; - String gav = String.format("%s:%s", - mid.getGroup(), - mid.getModule() - ); - return dependency.startsWith(gav); - } - return false; - }); - }).getFiles().forEach(jarPath -> listOfResourcePatterns.forEach(resourcePattern -> { - args.add("--exclude-config"); - args.add(jarPath.toPath().toAbsolutePath().toString()); - args.add(String.format("\"%s\"", resourcePattern)); - })); + options.getClasspath() + .getFrom().stream() + .filter(Configuration.class::isInstance) + .map(Configuration.class::cast) + .map(configuration -> configuration.getIncoming().artifactView(view -> { + view.setLenient(true); + view.componentFilter(id -> { + if (id instanceof ModuleComponentIdentifier) { + ModuleComponentIdentifier mid = (ModuleComponentIdentifier) id; + String gav = String.format("%s:%s", + mid.getGroup(), + mid.getModule() + ); + return dependency.startsWith(gav); + } + return false; + }); + }).getFiles().getFiles()) + .flatMap(Set::stream) // merge resulting sets of files + .collect(Collectors.toSet()) + .forEach(jarPath -> listOfResourcePatterns.forEach(resourcePattern -> { + args.add("--exclude-config"); + args.add(jarPath.toPath().toAbsolutePath().toString()); + args.add(String.format("\"%s\"", resourcePattern)); + })); + }); return args; } diff --git a/native-gradle-plugin/src/main/java/org/graalvm/buildtools/gradle/tasks/BuildNativeImageTask.java b/native-gradle-plugin/src/main/java/org/graalvm/buildtools/gradle/tasks/BuildNativeImageTask.java index ebeedfdc5..80bca852c 100644 --- a/native-gradle-plugin/src/main/java/org/graalvm/buildtools/gradle/tasks/BuildNativeImageTask.java +++ b/native-gradle-plugin/src/main/java/org/graalvm/buildtools/gradle/tasks/BuildNativeImageTask.java @@ -155,8 +155,7 @@ private List buildActualCommandLineArgs() { // a mapped value before the task was called, when we are actually calling it... getProviders().provider(() -> getOutputDirectory().getAsFile().get().getAbsolutePath()), getClasspathJar(), - getUseArgFile(), - getProject() + getUseArgFile() ).asArguments(); }