From e6684d0ca45c60cd0f5f1cc72915a70309e8d7bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Deleuze?= Date: Mon, 12 Sep 2022 11:13:49 +0200 Subject: [PATCH 1/6] Fix FileUtilsTest --- .../buildtools/utils/FileUtilsTest.java | 2 -- .../graalvm-reachability-metadata.tar.bz2 | Bin 484 -> 0 bytes .../graalvm-reachability-metadata.tar.gz | Bin 1056 -> 0 bytes .../graalvm-reachability-metadata.zip | Bin 1799 -> 1511 bytes 4 files changed, 2 deletions(-) delete mode 100644 common/utils/src/test/resources/graalvm-reachability-metadata.tar.bz2 delete mode 100644 common/utils/src/test/resources/graalvm-reachability-metadata.tar.gz diff --git a/common/utils/src/test/java/org/graalvm/buildtools/utils/FileUtilsTest.java b/common/utils/src/test/java/org/graalvm/buildtools/utils/FileUtilsTest.java index 0af07030f..c266c2e7a 100644 --- a/common/utils/src/test/java/org/graalvm/buildtools/utils/FileUtilsTest.java +++ b/common/utils/src/test/java/org/graalvm/buildtools/utils/FileUtilsTest.java @@ -131,8 +131,6 @@ void testExtract(@TempDir Path tempDir) throws IOException { assertTrue(Files.exists(tempDir.resolve("index.json"))); assertEquals("[]", String.join("\n", Files.readAllLines(tempDir.resolve("index.json")))); - assertTrue(Files.isDirectory(tempDir.resolve("org"))); - assertTrue(Files.isDirectory(tempDir.resolve("org.graalvm"))); assertTrue(Files.isDirectory(tempDir.resolve("org.graalvm.internal"))); assertTrue(Files.isDirectory(tempDir.resolve("org.graalvm.internal/library-with-reflection"))); assertTrue(Files.exists(tempDir.resolve("org.graalvm.internal/library-with-reflection/index.json"))); diff --git a/common/utils/src/test/resources/graalvm-reachability-metadata.tar.bz2 b/common/utils/src/test/resources/graalvm-reachability-metadata.tar.bz2 deleted file mode 100644 index b57c66fbfe3b159243acf8a5ad8d11af1d0ee4f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 484 zcmVEBGH4h8000000000gN&=c?Ju+gO zDYT6m4Kx{~1Jr5WJKkDLE1q;k*NV$kP*yOKYuo3o+j&}~#=zY(MPo`XbIfUd*I+2d zg$j~NEFF_+{8rw}B|Ds1A&`^oC^ZLMxKU}N9ea7K*@oi$AAiL%rV44kwNZx%`S_j+W^ynRPty8)fVGDdrUaoXWX$&teZ_$8J1yM-mu z5E`VoPN9ofHN>zn33P)%H34Z8`+kTNgn~o?C?VqsFpr}9qiHiV1_BIV1g6^!GFi^G zQd%B88fD3zv3YgQ+GQKZ`Ydy7^u~y6lJKV4WOVOo*7BIQ3cFj9+hNHiy0yjlN49dz azC(CuP^iUxV0K9-{9VZu;X*@PVEHtFh}V?> diff --git a/common/utils/src/test/resources/graalvm-reachability-metadata.tar.gz b/common/utils/src/test/resources/graalvm-reachability-metadata.tar.gz deleted file mode 100644 index ff230a230001f98ac1c6b35824bab5f727c8ec04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1056 zcmV+*1mF7~iwFP!0000014}PTOw1|E)h$X*OwLG5%FM|usnpF)ElEsCEJ@TWNi5P! zsxo4r3>W}`nTZLAHZ(UiK&HXK94KdKVq{`!XbeLFmthNb>*6yZIAxQ*B>=n#+A8m zYhXLa&+i|5p8nH6wPSzyi%q}Z28B+{EH}BodW9K#Df9Nn4-dDuhtFQ()9A`7xoUgb z;+>`cnPqZA9O|T5RT=o*m*!oR^EYL4-uu-)^3o(%9hV2M&$=ivD`~!UnLDvjY>{X~ zxVm$JtH8P}k5yeuHPjiJq@L^yi@5VH?yvv-C+C`%A7T4mm2zfJt$V_5#<@p~+^Xvf zZ$0!lIq@*d57nvPcekou6p&i7!*5}Cgz1qDhMXnM4yKHm!oTY}L|U3$7&R0ha~kw7 z`n@>Q*o2LVCxKk9(j&2~5t)m>YU{&3$`bY`D(MMl7iqcsU-p6Y*MPl`Nra*j#(X@W2QGxJhX zEA+C8^Ydtz#t7wq0|R4l{x>!;F*7za1Ll7t6GNlX{7(-M9m_S)P8bCP2=a^4^=WMf zxQ;h9#gqRH!1>?M(9F!p99T{m8X6e@>wi;PI}8Lyc>V{)e>$WMNV9Z6di)!i8JmyB zKRp0){AcEsq!#5R=1@B!kRJagCZ@)t@lOwcHU4ullZq0HDs{^+wif&nIQ87@o7-&p1SOO?zsAm9G z1?CtcbBvHV#!6szEYwKYFci#CkkeqAm2wh6HUfo8ib_*~LbY6@JsC0pN%`N9yc&Rv z^558OwEU+FATj=-9NpynytK@8BC7&I<-ei18Cv|C8k&rb|I!5@mH&B(xj0LIJ!r)1 z`KA^ZC#I*uO5wzu9GBGOoW!Ek6t~ROoRnf{fs85bn_7~Q50@V;ut&it7zLwX6pVsV aFbYP&C>RB!U=)l3IsyQ=Tr@ENC;$MYW%)?} diff --git a/common/utils/src/test/resources/graalvm-reachability-metadata.zip b/common/utils/src/test/resources/graalvm-reachability-metadata.zip index 5b9798dc50aa88c0e1acaa18f28e6e60db83976e..33f9b6da609431d865e4f593e26d9652bf3b7329 100644 GIT binary patch delta 438 zcmZqYd(J%}Q9_hKh9SQwT`#>TF)^nsS1&WKB(*3nF=ygBbp?({olpiOpo^w<@ z-p~+E24;rua>*b(`683>#Pe(zI`uJiYH%QFGT?+e0BET4WL@S-lbadkkwiDL>Q2;> zn*52eee!NcqVL?_>7lbD>%#y7d0RZ75_2~E*PR#y>L RHjo$DfN%y-+L9T>0|4W4Y|8)u delta 520 zcmaFP-Oe{5k)4G>h9SQwePX5hp|odb z2m=z(Mb)T3c_NDk*Iyq=Y3@+_u>8q6$Q zVB^pY*2gqhl^fMq0~8~bCu_2bPCmg{JK35!OO%B{0_sWuhPRIHKsL~~lTS0Ng1jrs zgCg4sk%hSrs!C4aG^)7%5o{66C~$C0wr63TT*fRpIf_+9pb?vb z^{gtByP3H#%+^OSyPOHbYz?TnT$AsxNC`Z^Q~(MTT@h9`P*`vPp$Rhs!(Jd}U;qH$ CiGnQv From a81019bb8caba07671339bdf28ee4472260ddf86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Deleuze?= Date: Mon, 12 Sep 2022 11:14:06 +0200 Subject: [PATCH 2/6] Remove unused imports in FileUtils --- .../src/main/java/org/graalvm/buildtools/utils/FileUtils.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/common/utils/src/main/java/org/graalvm/buildtools/utils/FileUtils.java b/common/utils/src/main/java/org/graalvm/buildtools/utils/FileUtils.java index 7a1768a51..5c8438ecd 100644 --- a/common/utils/src/main/java/org/graalvm/buildtools/utils/FileUtils.java +++ b/common/utils/src/main/java/org/graalvm/buildtools/utils/FileUtils.java @@ -52,10 +52,8 @@ import java.nio.file.StandardCopyOption; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; -import java.util.Arrays; import java.util.Optional; import java.util.function.Consumer; -import java.util.stream.Stream; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; From 795081d1870e5ab540fd500a31d900e26d205c92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Deleuze?= Date: Mon, 12 Sep 2022 11:14:34 +0200 Subject: [PATCH 3/6] Add support for override flag This commit adds support for overriding reachability metadata when the override flag is set to true, designed to be used with oracle/graalvm-reachability-metadata#51. It is implemented by adding the required --exclude-config build arguments. Closes #268 --- .../reachability/DirectoryConfiguration.java | 63 +++++++++++++++++++ ...GraalVMReachabilityMetadataRepository.java | 17 +++-- .../internal/FileSystemRepository.java | 19 +++--- .../internal/index/artifacts/Artifact.java | 9 ++- ...duleJsonVersionToConfigDirectoryIndex.java | 16 ++--- .../VersionToConfigDirectoryIndex.java | 23 +++---- .../internal/FileSystemRepositoryTest.java | 34 +++++++--- ...JsonVersionToConfigDirectoryIndexTest.java | 42 +++++++------ .../test/resources/json/artifact-1/index.json | 2 +- .../resources/repos/repo1/org/foo/index.json | 3 +- .../buildtools/gradle/NativeImagePlugin.java | 49 ++++++++++++++- .../GraalVMReachabilityMetadataService.java | 21 ++++--- .../buildtools/maven/AbstractNativeMojo.java | 22 ++++--- 13 files changed, 229 insertions(+), 91 deletions(-) create mode 100644 common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/DirectoryConfiguration.java diff --git a/common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/DirectoryConfiguration.java b/common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/DirectoryConfiguration.java new file mode 100644 index 000000000..db3f824f0 --- /dev/null +++ b/common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/DirectoryConfiguration.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2020, 2022 Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * The Universal Permissive License (UPL), Version 1.0 + * + * Subject to the condition set forth below, permission is hereby granted to any + * person obtaining a copy of this software, associated documentation and/or + * data (collectively the "Software"), free of charge and under any and all + * copyright rights in the Software, and any and all patent rights owned or + * freely licensable by each licensor hereunder covering either (i) the + * unmodified Software as contributed to or provided by such licensor, or (ii) + * the Larger Works (as defined below), to deal in both + * + * (a) the Software, and + * + * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if + * one is included with the Software each a "Larger Work" to which the Software + * is contributed by such licensors), + * + * without restriction, including without limitation the rights to copy, create + * derivative works of, display, perform, and distribute the Software and make, + * use, sell, offer for sale, import, export, have made, and have sold the + * Software and the Larger Work(s), and to sublicense the foregoing rights on + * either these or other terms. + * + * This license is subject to the following condition: + * + * The above copyright notice and either this complete permission notice or at a + * minimum a reference to the UPL must be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package org.graalvm.reachability; + +import java.nio.file.Path; + +public class DirectoryConfiguration { + + private final Path directory; + + private final boolean override; + + public DirectoryConfiguration(Path directory, boolean override) { + this.directory = directory; + this.override = override; + } + + public Path getDirectory() { + return directory; + } + + public boolean isOverride() { + return override; + } +} diff --git a/common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/GraalVMReachabilityMetadataRepository.java b/common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/GraalVMReachabilityMetadataRepository.java index 74a2432b0..692a2a2c8 100644 --- a/common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/GraalVMReachabilityMetadataRepository.java +++ b/common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/GraalVMReachabilityMetadataRepository.java @@ -40,7 +40,6 @@ */ package org.graalvm.reachability; -import java.nio.file.Path; import java.util.Collection; import java.util.Set; import java.util.function.Consumer; @@ -63,9 +62,9 @@ public interface GraalVMReachabilityMetadataRepository { * example if a configuration directory isn't available for a * particular artifact version. * @param queryBuilder the query builder - * @return the set of configuration directories matching the query + * @return the set of configuration matching the query */ - Set findConfigurationDirectoriesFor(Consumer queryBuilder); + Set findConfigurationsFor(Consumer queryBuilder); /** * Returns a list of configuration directories for the specified artifact. @@ -73,19 +72,19 @@ public interface GraalVMReachabilityMetadataRepository { * but the list may also be empty if the repository doesn't contain any. * Never null. * @param gavCoordinates the artifact GAV coordinates (group:artifact:version) - * @return a list of configuration directories + * @return a list of configuration */ - default Set findConfigurationDirectoriesFor(String gavCoordinates) { - return findConfigurationDirectoriesFor(q -> q.forArtifacts(gavCoordinates)); + default Set findConfigurationsFor(String gavCoordinates) { + return findConfigurationsFor(q -> q.forArtifacts(gavCoordinates)); } /** * Returns the set of configuration directories for all the modules supplied * as an argument. * @param modules the list of modules - * @return the set of configuration directories + * @return the set of configuration */ - default Set findConfigurationDirectoriesFor(Collection modules) { - return findConfigurationDirectoriesFor(q -> q.forArtifacts(modules)); + default Set findConfigurationsFor(Collection modules) { + return findConfigurationsFor(q -> q.forArtifacts(modules)); } } diff --git a/common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/FileSystemRepository.java b/common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/FileSystemRepository.java index 76dc0e26f..51b04d051 100644 --- a/common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/FileSystemRepository.java +++ b/common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/FileSystemRepository.java @@ -40,6 +40,7 @@ */ package org.graalvm.reachability.internal; +import org.graalvm.reachability.DirectoryConfiguration; import org.graalvm.reachability.GraalVMReachabilityMetadataRepository; import org.graalvm.reachability.Query; import org.graalvm.reachability.internal.index.artifacts.SingleModuleJsonVersionToConfigDirectoryIndex; @@ -90,7 +91,7 @@ public static boolean isSupportedArchiveFormat(String path) { } @Override - public Set findConfigurationDirectoriesFor(Consumer queryBuilder) { + public Set findConfigurationsFor(Consumer queryBuilder) { DefaultQuery query = new DefaultQuery(); queryBuilder.accept(query); return query.getArtifacts() @@ -106,25 +107,25 @@ public Set findConfigurationDirectoriesFor(Consumer queryBu if (artifactQuery.getForcedConfig().isPresent()) { String configVersion = artifactQuery.getForcedConfig().get(); logger.log(groupId, artifactId, version, "Configuration is forced to version " + configVersion); - return index.findForcedConfiguration(configVersion); + return index.findConfiguration(groupId, artifactId, configVersion); } - Optional configurationDirectory = index.findConfigurationDirectory(groupId, artifactId, version); - if (!configurationDirectory.isPresent() && artifactQuery.isUseLatestVersion()) { + Optional configuration = index.findConfiguration(groupId, artifactId, version); + if (!configuration.isPresent() && artifactQuery.isUseLatestVersion()) { logger.log(groupId, artifactId, version, "Configuration directory not found. Trying latest version."); - configurationDirectory = index.findLatestConfigurationFor(groupId, artifactId); - if (!configurationDirectory.isPresent()) { + configuration = index.findLatestConfigurationFor(groupId, artifactId); + if (!configuration.isPresent()) { logger.log(groupId, artifactId, version, "Latest version not found!"); } } - Optional finalConfigurationDirectory = configurationDirectory; + Optional finalConfigurationDirectory = configuration; logger.log(groupId, artifactId, version, () -> { if (finalConfigurationDirectory.isPresent()) { - Path path = finalConfigurationDirectory.get(); + Path path = finalConfigurationDirectory.get().getDirectory(); return "Configuration directory is " + rootDirectory.relativize(path); } return "missing."; }); - return configurationDirectory; + return configuration; }) .filter(Optional::isPresent) .map(Optional::get); diff --git a/common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/index/artifacts/Artifact.java b/common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/index/artifacts/Artifact.java index 3641a67a7..248f11f9e 100644 --- a/common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/index/artifacts/Artifact.java +++ b/common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/index/artifacts/Artifact.java @@ -52,16 +52,19 @@ public class Artifact { private final Set versions; private final String directory; private final boolean latest; + private final boolean override; @JsonCreator public Artifact(@JsonProperty("module") String module, @JsonProperty("tested-versions") Set versions, @JsonProperty("metadata-version") String directory, - @JsonProperty(value = "latest", defaultValue = "false") boolean latest) { + @JsonProperty(value = "latest", defaultValue = "false") boolean latest, + @JsonProperty(value = "override", defaultValue = "false") boolean override) { this.module = module; this.versions = versions; this.directory = directory; this.latest = latest; + this.override = override; } public String getModule() { @@ -79,4 +82,8 @@ public String getDirectory() { public boolean isLatest() { return latest; } + + public boolean isOverride() { + return override; + } } diff --git a/common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/index/artifacts/SingleModuleJsonVersionToConfigDirectoryIndex.java b/common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/index/artifacts/SingleModuleJsonVersionToConfigDirectoryIndex.java index 25709d50c..5a27bd3d9 100644 --- a/common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/index/artifacts/SingleModuleJsonVersionToConfigDirectoryIndex.java +++ b/common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/index/artifacts/SingleModuleJsonVersionToConfigDirectoryIndex.java @@ -42,6 +42,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.type.TypeFactory; +import org.graalvm.reachability.DirectoryConfiguration; import org.graalvm.reachability.internal.UncheckedIOException; import java.io.BufferedReader; @@ -80,12 +81,6 @@ private Map> parseIndexFile(Path rootPath) { } - @Override - public Optional findForcedConfiguration(String version) { - Path configDir = moduleRoot.resolve(version); - return Files.isDirectory(configDir) ? Optional.of(configDir) : Optional.empty(); - } - /** * Returns the configuration directory for the requested artifact. * @@ -95,7 +90,7 @@ public Optional findForcedConfiguration(String version) { * @return a configuration directory, or empty if no configuration directory is available */ @Override - public Optional findConfigurationDirectory(String groupId, String artifactId, String version) { + public Optional findConfiguration(String groupId, String artifactId, String version) { return findConfigurationFor(groupId, artifactId, artifact -> artifact.getVersions().contains(version)); } @@ -107,11 +102,11 @@ public Optional findConfigurationDirectory(String groupId, String artifact * @return a configuration directory, or empty if no configuration directory is available */ @Override - public Optional findLatestConfigurationFor(String groupId, String artifactId) { + public Optional findLatestConfigurationFor(String groupId, String artifactId) { return findConfigurationFor(groupId, artifactId, Artifact::isLatest); } - private Optional findConfigurationFor(String groupId, String artifactId, Predicate predicate) { + private Optional findConfigurationFor(String groupId, String artifactId, Predicate predicate) { String module = groupId + ":" + artifactId; List artifacts = index.get(module); if (artifacts == null) { @@ -121,6 +116,7 @@ private Optional findConfigurationFor(String groupId, String artifactId, P .filter(artifact -> artifact.getModule().equals(module)) .filter(predicate) .findFirst() - .map(artifact -> moduleRoot.resolve(artifact.getDirectory())); + .map(artifact -> new DirectoryConfiguration(moduleRoot.resolve(artifact.getDirectory()), artifact.isOverride())); } + } diff --git a/common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/index/artifacts/VersionToConfigDirectoryIndex.java b/common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/index/artifacts/VersionToConfigDirectoryIndex.java index 3a712265d..c93512d1e 100644 --- a/common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/index/artifacts/VersionToConfigDirectoryIndex.java +++ b/common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/index/artifacts/VersionToConfigDirectoryIndex.java @@ -40,33 +40,26 @@ */ package org.graalvm.reachability.internal.index.artifacts; -import java.nio.file.Path; import java.util.Optional; -public interface VersionToConfigDirectoryIndex { +import org.graalvm.reachability.DirectoryConfiguration; - /** - * Returns the specified configuration directory version, ignoring - * any existing configuration. - * @param version the requested version - * @return the configuration directory - */ - Optional findForcedConfiguration(String version); +public interface VersionToConfigDirectoryIndex { /** - * Returns the configuration directory for the requested artifact. + * Returns the configuration for the requested artifact. * @param groupId the group ID of the artifact * @param artifactId the artifact ID of the artifact * @param version the version of the artifact - * @return a configuration directory, or empty if no configuration directory is available + * @return a configuration, or empty if no configuration directory is available */ - Optional findConfigurationDirectory(String groupId, String artifactId, String version); + Optional findConfiguration(String groupId, String artifactId, String version); /** - * Returns the latest configuration directory for the requested artifact. + * Returns the latest configuration for the requested artifact. * @param groupId the group ID of the artifact * @param artifactId the artifact ID of the artifact - * @return a configuration directory, or empty if no configuration directory is available + * @return a configuration, or empty if no configuration directory is available */ - Optional findLatestConfigurationFor(String groupId, String artifactId); + Optional findLatestConfigurationFor(String groupId, String artifactId); } diff --git a/common/graalvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/FileSystemRepositoryTest.java b/common/graalvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/FileSystemRepositoryTest.java index 65c663116..b9206c89a 100644 --- a/common/graalvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/FileSystemRepositoryTest.java +++ b/common/graalvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/FileSystemRepositoryTest.java @@ -41,6 +41,7 @@ package org.graalvm.reachability.internal; +import org.graalvm.reachability.DirectoryConfiguration; import org.graalvm.reachability.Query; import org.junit.jupiter.api.Test; @@ -51,6 +52,8 @@ import java.util.function.Consumer; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; class FileSystemRepositoryTest { private FileSystemRepository repository; @@ -65,9 +68,11 @@ void testRepo1() { // then: result.hasSinglePath("org/foo/1.0"); + result.hasNoOverride(); // when: lookup("org:foo:1.1"); + result.hasOverride(); // then: result.hasSinglePath("org/foo/1.1"); @@ -87,6 +92,7 @@ void testRepo2() { // then: result.hasSinglePath("org/foo/1.1"); + result.hasNoOverride(); } @Test @@ -166,11 +172,11 @@ void canUseLatestConfigDir() { } private void lookup(Consumer builder) { - result = new Result(repository.findConfigurationDirectoriesFor(builder), repoPath); + result = new Result(repository.findConfigurationsFor(builder), repoPath); } private void lookup(String gav) { - result = new Result(repository.findConfigurationDirectoriesFor(gav), repoPath); + result = new Result(repository.findConfigurationsFor(gav), repoPath); } private void withRepo(String id) { @@ -184,20 +190,32 @@ private void withRepo(String id) { private static final class Result { private final Path repoPath; - private final Set configDirs; + private final Set configs; - private Result(Set configDirs, Path repoPath) { - this.configDirs = configDirs; + private Result(Set configs, Path repoPath) { + this.configs = configs; this.repoPath = repoPath; } public void isEmpty() { - assertEquals(0, configDirs.size()); + assertEquals(0, configs.size()); } public void hasSinglePath(String path) { - assertEquals(1, configDirs.size()); - assertEquals(repoPath.resolve(path), configDirs.iterator().next()); + assertEquals(1, configs.size()); + assertEquals(repoPath.resolve(path), configs.iterator().next().getDirectory()); + } + + public void hasOverride() { + for (DirectoryConfiguration config : configs) { + assertTrue(config.isOverride()); + } + } + + public void hasNoOverride() { + for (DirectoryConfiguration config : configs) { + assertFalse(config.isOverride()); + } } } } diff --git a/common/graalvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/index/artifacts/SingleModuleJsonVersionToConfigDirectoryIndexTest.java b/common/graalvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/index/artifacts/SingleModuleJsonVersionToConfigDirectoryIndexTest.java index 4cf3384e3..9198f5c33 100644 --- a/common/graalvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/index/artifacts/SingleModuleJsonVersionToConfigDirectoryIndexTest.java +++ b/common/graalvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/index/artifacts/SingleModuleJsonVersionToConfigDirectoryIndexTest.java @@ -41,6 +41,7 @@ package org.graalvm.reachability.internal.index.artifacts; +import org.graalvm.reachability.DirectoryConfiguration; import org.junit.jupiter.api.Test; import java.io.File; @@ -61,31 +62,36 @@ class SingleModuleJsonVersionToConfigDirectoryIndexTest { void checkIndex() throws URISyntaxException { withIndex("artifact-1"); - Optional configDir = index.findConfigurationDirectory("com.foo", "bar", "1.0"); - assertTrue(configDir.isPresent()); - assertEquals(repoPath.resolve("1.0"), configDir.get()); + Optional config = index.findConfiguration("com.foo", "bar", "1.0"); + assertTrue(config.isPresent()); + assertEquals(repoPath.resolve("1.0"), config.get().getDirectory()); + assertFalse(config.get().isOverride()); - configDir = index.findConfigurationDirectory("com.foo", "bar", "1.3"); - assertTrue(configDir.isPresent()); - assertEquals(repoPath.resolve("1.0"), configDir.get()); + config = index.findConfiguration("com.foo", "bar", "1.3"); + assertTrue(config.isPresent()); + assertEquals(repoPath.resolve("1.0"), config.get().getDirectory()); + assertFalse(config.get().isOverride()); - configDir = index.findConfigurationDirectory("com.foo", "bar", "2.0"); - assertTrue(configDir.isPresent()); - assertEquals(repoPath.resolve("2.0"), configDir.get()); + config = index.findConfiguration("com.foo", "bar", "2.0"); + assertTrue(config.isPresent()); + assertEquals(repoPath.resolve("2.0"), config.get().getDirectory()); + assertTrue(config.get().isOverride()); - configDir = index.findConfigurationDirectory("com.foo", "bar", "2.5"); - assertFalse(configDir.isPresent()); + config = index.findConfiguration("com.foo", "bar", "2.5"); + assertFalse(config.isPresent()); - configDir = index.findConfigurationDirectory("com.foo", "bar-all", "2.0"); - assertTrue(configDir.isPresent()); - assertEquals(repoPath.resolve("2.0"), configDir.get()); + config = index.findConfiguration("com.foo", "bar-all", "2.0"); + assertTrue(config.isPresent()); + assertEquals(repoPath.resolve("2.0"), config.get().getDirectory()); + assertFalse(config.get().isOverride()); - configDir = index.findConfigurationDirectory("com.foo", "nope", "1.0"); - assertFalse(configDir.isPresent()); + config = index.findConfiguration("com.foo", "nope", "1.0"); + assertFalse(config.isPresent()); - Optional latest = index.findLatestConfigurationFor("com.foo", "bar"); + Optional latest = index.findLatestConfigurationFor("com.foo", "bar"); assertTrue(latest.isPresent()); - assertEquals(repoPath.resolve("2.0"), latest.get()); + assertEquals(repoPath.resolve("2.0"), latest.get().getDirectory()); + assertTrue(latest.get().isOverride()); } diff --git a/common/graalvm-reachability-metadata/src/test/resources/json/artifact-1/index.json b/common/graalvm-reachability-metadata/src/test/resources/json/artifact-1/index.json index 63370f676..d2f3b3d07 100644 --- a/common/graalvm-reachability-metadata/src/test/resources/json/artifact-1/index.json +++ b/common/graalvm-reachability-metadata/src/test/resources/json/artifact-1/index.json @@ -1,5 +1,5 @@ [ { "module": "com.foo:bar", "tested-versions": ["1.0", "1.1", "1.2", "1.3"], "metadata-version": "1.0" }, - { "module": "com.foo:bar", "tested-versions": ["2.0", "2.1"], "metadata-version": "2.0", "latest": true }, + { "module": "com.foo:bar", "tested-versions": ["2.0", "2.1"], "metadata-version": "2.0", "latest": true, "override": true }, { "module": "com.foo:bar-all", "tested-versions": ["2.0", "2.1"], "metadata-version": "2.0" } ] diff --git a/common/graalvm-reachability-metadata/src/test/resources/repos/repo1/org/foo/index.json b/common/graalvm-reachability-metadata/src/test/resources/repos/repo1/org/foo/index.json index 980fe87e7..70f6d9c33 100644 --- a/common/graalvm-reachability-metadata/src/test/resources/repos/repo1/org/foo/index.json +++ b/common/graalvm-reachability-metadata/src/test/resources/repos/repo1/org/foo/index.json @@ -12,6 +12,7 @@ "1.1" ], "metadata-version": "1.1", - "latest": true + "latest": true, + "override": true } ] diff --git a/native-gradle-plugin/src/main/java/org/graalvm/buildtools/gradle/NativeImagePlugin.java b/native-gradle-plugin/src/main/java/org/graalvm/buildtools/gradle/NativeImagePlugin.java index 1d240f784..3586f46ed 100644 --- a/native-gradle-plugin/src/main/java/org/graalvm/buildtools/gradle/NativeImagePlugin.java +++ b/native-gradle-plugin/src/main/java/org/graalvm/buildtools/gradle/NativeImagePlugin.java @@ -66,6 +66,7 @@ import org.graalvm.buildtools.gradle.tasks.actions.MergeAgentFilesAction; import org.graalvm.buildtools.gradle.tasks.actions.ProcessGeneratedGraalResourceFilesAction; import org.graalvm.buildtools.utils.SharedConstants; +import org.graalvm.reachability.DirectoryConfiguration; import org.gradle.api.Action; import org.gradle.api.NamedDomainObjectContainer; import org.gradle.api.Plugin; @@ -116,6 +117,7 @@ import java.net.URI; import java.net.URISyntaxException; import java.nio.file.Path; +import java.util.AbstractMap; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -126,6 +128,7 @@ import java.util.Set; import java.util.function.Predicate; import java.util.stream.Collectors; +import java.util.stream.Stream; import static org.graalvm.buildtools.gradle.internal.GradleUtils.transitiveProjectArtifacts; import static org.graalvm.buildtools.gradle.internal.NativeImageExecutableLocator.graalvmHomeProvider; @@ -307,6 +310,7 @@ private void configureAutomaticTaskCreation(Project project, t.getOutputFile().map(f -> f.getAsFile().getParentFile()) )); configureJvmReachabilityConfigurationDirectories(project, graalExtension, options, sourceSet); + configureJvmReachabilityExcludeConfigArgs(project, graalExtension, options, sourceSet); }); } @@ -326,7 +330,7 @@ private void configureJvmReachabilityConfigurationDirectories(Project project, G Configuration classpath = project.getConfigurations().getByName(sourceSet.getRuntimeClasspathConfigurationName()); Set excludedModules = repositoryExtension.getExcludedModules().getOrElse(Collections.emptySet()); Map forcedVersions = repositoryExtension.getModuleToConfigVersion().getOrElse(Collections.emptyMap()); - return serviceProvider.map(repo -> repo.findConfigurationDirectoriesFor(query -> classpath.getIncoming().getResolutionResult().allComponents(component -> { + return serviceProvider.map(repo -> repo.findConfigurationsFor(query -> classpath.getIncoming().getResolutionResult().allComponents(component -> { ModuleVersionIdentifier moduleVersion = component.getModuleVersion(); String module = Objects.requireNonNull(moduleVersion).getGroup() + ":" + moduleVersion.getName(); if (!excludedModules.contains(module)) { @@ -339,7 +343,7 @@ private void configureJvmReachabilityConfigurationDirectories(Project project, G } query.useLatestConfigWhenVersionIsUntested(); })).stream() - .map(Path::toAbsolutePath) + .map(configuration -> configuration.getDirectory().toAbsolutePath()) .map(Path::toFile) .collect(Collectors.toList())); } @@ -348,6 +352,47 @@ private void configureJvmReachabilityConfigurationDirectories(Project project, G })); } + private void configureJvmReachabilityExcludeConfigArgs(Project project, GraalVMExtension graalExtension, NativeImageOptions options, SourceSet sourceSet) { + GraalVMReachabilityMetadataRepositoryExtension repositoryExtension = reachabilityExtensionOn(graalExtension); + Provider serviceProvider = project.getGradle() + .getSharedServices() + .registerIfAbsent("nativeConfigurationService", GraalVMReachabilityMetadataService.class, spec -> { + LogLevel logLevel = determineLogLevel(); + spec.getParameters().getLogLevel().set(logLevel); + spec.getParameters().getUri().set(repositoryExtension.getUri()); + spec.getParameters().getCacheDir().set(new File(project.getGradle().getGradleUserHomeDir(), "native-build-tools/repositories")); + }); + options.getExcludeConfig().putAll(repositoryExtension.getEnabled().flatMap(enabled -> { + if (enabled) { + if (repositoryExtension.getUri().isPresent()) { + Configuration classpath = project.getConfigurations().getByName(sourceSet.getRuntimeClasspathConfigurationName()); + Set excludedModules = repositoryExtension.getExcludedModules().getOrElse(Collections.emptySet()); + Map forcedVersions = repositoryExtension.getModuleToConfigVersion().getOrElse(Collections.emptyMap()); + return serviceProvider.map(repo -> classpath.getIncoming().getResolutionResult().getAllComponents().stream().flatMap(component -> { + ModuleVersionIdentifier moduleVersion = component.getModuleVersion(); + return repo.findConfigurationsFor(query -> { + String module = Objects.requireNonNull(moduleVersion).getGroup() + ":" + moduleVersion.getName(); + if (!excludedModules.contains(module)) { + query.forArtifact(artifact -> { + artifact.gav(module + ":" + moduleVersion.getVersion()); + if (forcedVersions.containsKey(module)) { + artifact.forceConfigVersion(forcedVersions.get(module)); + } + }); + } + query.useLatestConfigWhenVersionIsUntested(); + }).stream() + .filter(DirectoryConfiguration::isOverride) + .map(configuration -> new AbstractMap.SimpleEntry<>( + moduleVersion.getGroup() + ":" + moduleVersion.getName() + ":" + moduleVersion.getVersion(), + Arrays.asList("^/META-INF/native-image/"))); + }).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue))); + } + } + return project.getProviders().provider(Collections::emptyMap); + })); + } + private static LogLevel determineLogLevel() { LogLevel logLevel = LogLevel.DEBUG; String loggingProperty = System.getProperty(CONFIG_REPO_LOGLEVEL); diff --git a/native-gradle-plugin/src/main/java/org/graalvm/buildtools/gradle/internal/GraalVMReachabilityMetadataService.java b/native-gradle-plugin/src/main/java/org/graalvm/buildtools/gradle/internal/GraalVMReachabilityMetadataService.java index d348f0b31..9a9d77d66 100644 --- a/native-gradle-plugin/src/main/java/org/graalvm/buildtools/gradle/internal/GraalVMReachabilityMetadataService.java +++ b/native-gradle-plugin/src/main/java/org/graalvm/buildtools/gradle/internal/GraalVMReachabilityMetadataService.java @@ -41,6 +41,7 @@ package org.graalvm.buildtools.gradle.internal; import org.graalvm.buildtools.utils.FileUtils; +import org.graalvm.reachability.DirectoryConfiguration; import org.graalvm.reachability.GraalVMReachabilityMetadataRepository; import org.graalvm.reachability.Query; import org.graalvm.reachability.internal.FileSystemRepository; @@ -169,17 +170,17 @@ public void log(String groupId, String artifactId, String version, Supplier findConfigurationDirectoriesFor(Consumer queryBuilder) { - return repository.findConfigurationDirectoriesFor(queryBuilder); + public Set findConfigurationsFor(Consumer queryBuilder) { + return repository.findConfigurationsFor(queryBuilder); } /** @@ -189,11 +190,11 @@ public Set findConfigurationDirectoriesFor(Consumer queryBu * Never null. * * @param gavCoordinates the artifact GAV coordinates (group:artifact:version) - * @return a list of configuration directories + * @return a list of configurations */ @Override - public Set findConfigurationDirectoriesFor(String gavCoordinates) { - return repository.findConfigurationDirectoriesFor(gavCoordinates); + public Set findConfigurationsFor(String gavCoordinates) { + return repository.findConfigurationsFor(gavCoordinates); } /** @@ -201,10 +202,10 @@ public Set findConfigurationDirectoriesFor(String gavCoordinates) { * as an argument. * * @param modules the list of modules - * @return the set of configuration directories + * @return the set of configurations */ @Override - public Set findConfigurationDirectoriesFor(Collection modules) { - return repository.findConfigurationDirectoriesFor(modules); + public Set findConfigurationsFor(Collection modules) { + return repository.findConfigurationsFor(modules); } } diff --git a/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/AbstractNativeMojo.java b/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/AbstractNativeMojo.java index a6e00c790..3bb5acac4 100644 --- a/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/AbstractNativeMojo.java +++ b/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/AbstractNativeMojo.java @@ -58,6 +58,7 @@ import org.graalvm.buildtools.utils.FileUtils; import org.graalvm.buildtools.utils.NativeImageUtils; import org.graalvm.buildtools.utils.SharedConstants; +import org.graalvm.reachability.DirectoryConfiguration; import org.graalvm.reachability.GraalVMReachabilityMetadataRepository; import org.graalvm.reachability.internal.FileSystemRepository; @@ -82,6 +83,7 @@ import java.util.Optional; import java.util.Set; import java.util.function.Supplier; +import java.util.regex.Pattern; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -131,7 +133,7 @@ public abstract class AbstractNativeMojo extends AbstractMojo { protected final List imageClasspath; - protected final Set metadataRepositoryPaths; + protected final Set metadataRepositoryConfigurations; @Parameter(property = "debug", defaultValue = "false") protected boolean debug; @@ -192,7 +194,7 @@ public abstract class AbstractNativeMojo extends AbstractMojo { @Inject protected AbstractNativeMojo() { imageClasspath = new ArrayList<>(); - metadataRepositoryPaths = new HashSet<>(); + metadataRepositoryConfigurations = new HashSet<>(); useArgFile = SharedConstants.IS_WINDOWS; } @@ -526,9 +528,9 @@ public boolean isArtifactExcludedFromMetadataRepository(Artifact dependency) { } protected void maybeAddReachabilityMetadata(List configDirs) { - if (isMetadataRepositoryEnabled() && !metadataRepositoryPaths.isEmpty()) { - metadataRepositoryPaths.stream() - .map(Path::toAbsolutePath) + if (isMetadataRepositoryEnabled() && !metadataRepositoryConfigurations.isEmpty()) { + metadataRepositoryConfigurations.stream() + .map(configuration -> configuration.getDirectory().toAbsolutePath()) .map(Path::toFile) .map(File::getAbsolutePath) .forEach(configDirs::add); @@ -537,7 +539,7 @@ protected void maybeAddReachabilityMetadata(List configDirs) { protected void maybeAddDependencyMetadata(Artifact dependency) { if (isMetadataRepositoryEnabled() && metadataRepository != null && !isArtifactExcludedFromMetadataRepository(dependency)) { - metadataRepositoryPaths.addAll(metadataRepository.findConfigurationDirectoriesFor(q -> { + Set configurations = metadataRepository.findConfigurationsFor(q -> { q.useLatestConfigWhenVersionIsUntested(); q.forArtifact(artifact -> { artifact.gav(String.join(":", @@ -546,7 +548,13 @@ protected void maybeAddDependencyMetadata(Artifact dependency) { dependency.getVersion())); getMetadataVersion(dependency).ifPresent(artifact::forceConfigVersion); }); - })); + }); + metadataRepositoryConfigurations.addAll(configurations); + if (configurations.stream().anyMatch(DirectoryConfiguration::isOverride)) { + buildArgs.add("--exclude-config"); + buildArgs.add(Pattern.quote(dependency.getFile().getAbsolutePath())); + buildArgs.add("^/META-INF/native-image/"); + } } } From 92691c3f6dae1bce0a333b2ab48213f420a7965e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Deleuze?= Date: Tue, 13 Sep 2022 19:42:25 +0200 Subject: [PATCH 4/6] Fix NativeImagePlugin.addExcludeConfigArg and related documentation --- docs/src/docs/snippets/gradle/groovy/build.gradle | 4 ++-- docs/src/docs/snippets/gradle/kotlin/build.gradle.kts | 4 ++-- .../org/graalvm/buildtools/gradle/NativeImagePlugin.java | 7 ++++--- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/docs/src/docs/snippets/gradle/groovy/build.gradle b/docs/src/docs/snippets/gradle/groovy/build.gradle index 5362b1745..009e07f68 100644 --- a/docs/src/docs/snippets/gradle/groovy/build.gradle +++ b/docs/src/docs/snippets/gradle/groovy/build.gradle @@ -124,8 +124,8 @@ graalvmNative { systemProperties = [name1: 'value1', name2: 'value2'] // Sets the system properties to use for the native image builder configurationFileDirectories.from(file('src/my-config')) // Adds a native image configuration file directory, containing files like reflection configuration - excludeConfig.put("org.example.test", ["META-INF/native-image/*", "config/*"]) // Excludes configuration that matches one of given regexes from JAR of dependency with said coordinates. - excludeConfig.put(file("path/to/artifact.jar"), listOf("META-INF/native-image/*", "config/*")) + excludeConfig.put("org.example.test:artifact:version", ["^/META-INF/native-image/.*", "^/config/.*"]) // Excludes configuration that matches one of given regexes from JAR of dependency with said coordinates. + excludeConfig.put(file("path/to/artifact.jar"), listOf("^/META-INF/native-image/.*", "^/config/.*")) // Advanced options buildArgs.add('-H:Extra') // Passes '-H:Extra' to the native image builder options. This can be used to pass parameters which are not directly supported by this extension diff --git a/docs/src/docs/snippets/gradle/kotlin/build.gradle.kts b/docs/src/docs/snippets/gradle/kotlin/build.gradle.kts index 6bf6d4c2c..a51b49fa1 100644 --- a/docs/src/docs/snippets/gradle/kotlin/build.gradle.kts +++ b/docs/src/docs/snippets/gradle/kotlin/build.gradle.kts @@ -125,8 +125,8 @@ graalvmNative { systemProperties.putAll(mapOf("name1" to "value1", "name2" to "value2")) // Sets the system properties to use for the native image builder configurationFileDirectories.from(file("src/my-config")) // Adds a native image configuration file directory, containing files like reflection configuration - excludeConfig.put("org.example.test", listOf("META-INF/native-image/*", "config/*")) // Excludes configuration that matches one of given regexes from JAR of dependency with said coordinates. - excludeConfig.put(file("path/to/artifact.jar"), listOf("META-INF/native-image/*", "config/*")) + excludeConfig.put("org.example.test:artifact:version", listOf("^/META-INF/native-image/.*", "^/config/.*")) // Excludes configuration that matches one of given regexes from JAR of dependency with said coordinates. + excludeConfig.put(file("path/to/artifact.jar"), listOf("^/META-INF/native-image/.*", "^/config/.*")) // Advanced options buildArgs.add("-H:Extra") // Passes '-H:Extra' to the native image builder options. This can be used to pass parameters which are not directly supported by this extension diff --git a/native-gradle-plugin/src/main/java/org/graalvm/buildtools/gradle/NativeImagePlugin.java b/native-gradle-plugin/src/main/java/org/graalvm/buildtools/gradle/NativeImagePlugin.java index 3586f46ed..4edd45e91 100644 --- a/native-gradle-plugin/src/main/java/org/graalvm/buildtools/gradle/NativeImagePlugin.java +++ b/native-gradle-plugin/src/main/java/org/graalvm/buildtools/gradle/NativeImagePlugin.java @@ -127,6 +127,7 @@ import java.util.Objects; import java.util.Set; import java.util.function.Predicate; +import java.util.regex.Pattern; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -385,7 +386,7 @@ private void configureJvmReachabilityExcludeConfigArgs(Project project, GraalVME .filter(DirectoryConfiguration::isOverride) .map(configuration -> new AbstractMap.SimpleEntry<>( moduleVersion.getGroup() + ":" + moduleVersion.getName() + ":" + moduleVersion.getVersion(), - Arrays.asList("^/META-INF/native-image/"))); + Arrays.asList("^/META-INF/native-image/.*"))); }).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue))); } } @@ -660,8 +661,8 @@ private static NativeImageOptions createTestOptions(GraalVMExtension graalExtens private static void addExcludeConfigArg(List args, Path jarPath, List listOfResourcePatterns) { listOfResourcePatterns.forEach(resourcePattern -> { args.add("--exclude-config"); - args.add(jarPath.toAbsolutePath().toString()); - args.add(String.format("\"%s\"", resourcePattern)); + args.add(Pattern.quote(jarPath.toAbsolutePath().toString())); + args.add(String.format("%s", resourcePattern)); }); } From bc7d11445ba7391b5d1ac1190e4542d18e5f4bef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Deleuze?= Date: Sun, 18 Sep 2022 13:40:07 +0200 Subject: [PATCH 5/6] Remove unused import --- .../java/org/graalvm/buildtools/gradle/NativeImagePlugin.java | 1 - 1 file changed, 1 deletion(-) diff --git a/native-gradle-plugin/src/main/java/org/graalvm/buildtools/gradle/NativeImagePlugin.java b/native-gradle-plugin/src/main/java/org/graalvm/buildtools/gradle/NativeImagePlugin.java index 4edd45e91..332df0445 100644 --- a/native-gradle-plugin/src/main/java/org/graalvm/buildtools/gradle/NativeImagePlugin.java +++ b/native-gradle-plugin/src/main/java/org/graalvm/buildtools/gradle/NativeImagePlugin.java @@ -129,7 +129,6 @@ import java.util.function.Predicate; import java.util.regex.Pattern; import java.util.stream.Collectors; -import java.util.stream.Stream; import static org.graalvm.buildtools.gradle.internal.GradleUtils.transitiveProjectArtifacts; import static org.graalvm.buildtools.gradle.internal.NativeImageExecutableLocator.graalvmHomeProvider; From 62c1cc4ee0d0f641b6d269cf2de730c7a4e7462f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Deleuze?= Date: Sun, 18 Sep 2022 15:42:03 +0200 Subject: [PATCH 6/6] Fix functional tests --- samples/native-config-integration/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/native-config-integration/build.gradle b/samples/native-config-integration/build.gradle index dc38d47af..685e968be 100644 --- a/samples/native-config-integration/build.gradle +++ b/samples/native-config-integration/build.gradle @@ -78,7 +78,7 @@ graalvmNative { binaries.all { verbose = true runtimeArgs.add("-DmessageClass=org.graalvm.internal.reflect.Message") - excludeConfig.put("org.graalvm.internal:library-with-reflection:1.5", ["*"]) + excludeConfig.put("org.graalvm.internal:library-with-reflection:1.5", [".*"]) excludeConfig.put(file("test.jar"), ["META-INF/*"]) } }