From 819152dbff83b0e88d82be3360beb419602beb2e Mon Sep 17 00:00:00 2001 From: Cedric Champeau Date: Tue, 21 Jun 2022 18:33:44 +0200 Subject: [PATCH 01/27] Bump version --- gradle/libs.versions.toml | 2 +- native-maven-plugin/reproducers/issue-144/pom.xml | 4 ++-- samples/java-application-with-custom-tests/gradle.properties | 2 +- .../java-application-with-extra-sourceset/gradle.properties | 2 +- samples/java-application-with-reflection/gradle.properties | 2 +- samples/java-application-with-reflection/pom.xml | 4 ++-- samples/java-application-with-resources/gradle.properties | 2 +- samples/java-application-with-resources/pom.xml | 4 ++-- samples/java-application-with-tests/gradle.properties | 2 +- samples/java-application-with-tests/pom.xml | 4 ++-- samples/java-application/gradle.properties | 2 +- samples/java-application/pom.xml | 4 ++-- samples/java-library/gradle.properties | 2 +- samples/java-library/pom.xml | 4 ++-- samples/kotlin-application-with-tests/gradle.properties | 2 +- samples/multi-project-with-tests/gradle.properties | 2 +- samples/native-config-integration/gradle.properties | 2 +- samples/native-config-integration/pom.xml | 4 ++-- 18 files changed, 25 insertions(+), 25 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c94314b55..cce4b36be 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,6 +1,6 @@ [versions] # Project versions -nativeBuildTools = "0.9.12" +nativeBuildTools = "0.9.13-SNAPSHOT" # External dependencies spock = "2.0-groovy-3.0" diff --git a/native-maven-plugin/reproducers/issue-144/pom.xml b/native-maven-plugin/reproducers/issue-144/pom.xml index 085fd199b..f30215ec1 100644 --- a/native-maven-plugin/reproducers/issue-144/pom.xml +++ b/native-maven-plugin/reproducers/issue-144/pom.xml @@ -56,8 +56,8 @@ 1.8 UTF-8 - 0.9.12 - 0.9.12 + 0.9.13-SNAPSHOT + 0.9.13-SNAPSHOT example-app org.graalvm.demo.Application diff --git a/samples/java-application-with-custom-tests/gradle.properties b/samples/java-application-with-custom-tests/gradle.properties index ce717b95b..29748bf5b 100644 --- a/samples/java-application-with-custom-tests/gradle.properties +++ b/samples/java-application-with-custom-tests/gradle.properties @@ -1,3 +1,3 @@ -native.gradle.plugin.version = 0.9.12 +native.gradle.plugin.version = 0.9.13-SNAPSHOT junit.jupiter.version = 5.8.1 junit.platform.version = 1.8.1 diff --git a/samples/java-application-with-extra-sourceset/gradle.properties b/samples/java-application-with-extra-sourceset/gradle.properties index ce717b95b..29748bf5b 100644 --- a/samples/java-application-with-extra-sourceset/gradle.properties +++ b/samples/java-application-with-extra-sourceset/gradle.properties @@ -1,3 +1,3 @@ -native.gradle.plugin.version = 0.9.12 +native.gradle.plugin.version = 0.9.13-SNAPSHOT junit.jupiter.version = 5.8.1 junit.platform.version = 1.8.1 diff --git a/samples/java-application-with-reflection/gradle.properties b/samples/java-application-with-reflection/gradle.properties index ce717b95b..29748bf5b 100644 --- a/samples/java-application-with-reflection/gradle.properties +++ b/samples/java-application-with-reflection/gradle.properties @@ -1,3 +1,3 @@ -native.gradle.plugin.version = 0.9.12 +native.gradle.plugin.version = 0.9.13-SNAPSHOT junit.jupiter.version = 5.8.1 junit.platform.version = 1.8.1 diff --git a/samples/java-application-with-reflection/pom.xml b/samples/java-application-with-reflection/pom.xml index ab4f5934e..a524af7de 100644 --- a/samples/java-application-with-reflection/pom.xml +++ b/samples/java-application-with-reflection/pom.xml @@ -52,8 +52,8 @@ 1.8 UTF-8 5.8.1 - 0.9.12 - 0.9.12 + 0.9.13-SNAPSHOT + 0.9.13-SNAPSHOT example-app org.graalvm.demo.Application diff --git a/samples/java-application-with-resources/gradle.properties b/samples/java-application-with-resources/gradle.properties index ce717b95b..29748bf5b 100644 --- a/samples/java-application-with-resources/gradle.properties +++ b/samples/java-application-with-resources/gradle.properties @@ -1,3 +1,3 @@ -native.gradle.plugin.version = 0.9.12 +native.gradle.plugin.version = 0.9.13-SNAPSHOT junit.jupiter.version = 5.8.1 junit.platform.version = 1.8.1 diff --git a/samples/java-application-with-resources/pom.xml b/samples/java-application-with-resources/pom.xml index b79e6954a..0526711a7 100644 --- a/samples/java-application-with-resources/pom.xml +++ b/samples/java-application-with-resources/pom.xml @@ -51,9 +51,9 @@ 1.8 UTF-8 - 0.9.12 + 0.9.13-SNAPSHOT 5.8.1 - 0.9.12 + 0.9.13-SNAPSHOT example-app org.graalvm.demo.Application diff --git a/samples/java-application-with-tests/gradle.properties b/samples/java-application-with-tests/gradle.properties index ce717b95b..29748bf5b 100644 --- a/samples/java-application-with-tests/gradle.properties +++ b/samples/java-application-with-tests/gradle.properties @@ -1,3 +1,3 @@ -native.gradle.plugin.version = 0.9.12 +native.gradle.plugin.version = 0.9.13-SNAPSHOT junit.jupiter.version = 5.8.1 junit.platform.version = 1.8.1 diff --git a/samples/java-application-with-tests/pom.xml b/samples/java-application-with-tests/pom.xml index fa76f1be9..27aa997b7 100644 --- a/samples/java-application-with-tests/pom.xml +++ b/samples/java-application-with-tests/pom.xml @@ -52,8 +52,8 @@ 1.8 UTF-8 5.8.1 - 0.9.12 - 0.9.12 + 0.9.13-SNAPSHOT + 0.9.13-SNAPSHOT example-app org.graalvm.demo.Application diff --git a/samples/java-application/gradle.properties b/samples/java-application/gradle.properties index ce717b95b..29748bf5b 100644 --- a/samples/java-application/gradle.properties +++ b/samples/java-application/gradle.properties @@ -1,3 +1,3 @@ -native.gradle.plugin.version = 0.9.12 +native.gradle.plugin.version = 0.9.13-SNAPSHOT junit.jupiter.version = 5.8.1 junit.platform.version = 1.8.1 diff --git a/samples/java-application/pom.xml b/samples/java-application/pom.xml index beff61e11..b8545b262 100644 --- a/samples/java-application/pom.xml +++ b/samples/java-application/pom.xml @@ -51,8 +51,8 @@ 1.8 UTF-8 - 0.9.12 - 0.9.12 + 0.9.13-SNAPSHOT + 0.9.13-SNAPSHOT example-app org.graalvm.demo.Application diff --git a/samples/java-library/gradle.properties b/samples/java-library/gradle.properties index ce717b95b..29748bf5b 100644 --- a/samples/java-library/gradle.properties +++ b/samples/java-library/gradle.properties @@ -1,3 +1,3 @@ -native.gradle.plugin.version = 0.9.12 +native.gradle.plugin.version = 0.9.13-SNAPSHOT junit.jupiter.version = 5.8.1 junit.platform.version = 1.8.1 diff --git a/samples/java-library/pom.xml b/samples/java-library/pom.xml index 16446c9ee..14b800b04 100644 --- a/samples/java-library/pom.xml +++ b/samples/java-library/pom.xml @@ -51,8 +51,8 @@ 1.8 UTF-8 - 0.9.12 - 0.9.12 + 0.9.13-SNAPSHOT + 0.9.13-SNAPSHOT java-library diff --git a/samples/kotlin-application-with-tests/gradle.properties b/samples/kotlin-application-with-tests/gradle.properties index ce717b95b..29748bf5b 100644 --- a/samples/kotlin-application-with-tests/gradle.properties +++ b/samples/kotlin-application-with-tests/gradle.properties @@ -1,3 +1,3 @@ -native.gradle.plugin.version = 0.9.12 +native.gradle.plugin.version = 0.9.13-SNAPSHOT junit.jupiter.version = 5.8.1 junit.platform.version = 1.8.1 diff --git a/samples/multi-project-with-tests/gradle.properties b/samples/multi-project-with-tests/gradle.properties index ce717b95b..29748bf5b 100644 --- a/samples/multi-project-with-tests/gradle.properties +++ b/samples/multi-project-with-tests/gradle.properties @@ -1,3 +1,3 @@ -native.gradle.plugin.version = 0.9.12 +native.gradle.plugin.version = 0.9.13-SNAPSHOT junit.jupiter.version = 5.8.1 junit.platform.version = 1.8.1 diff --git a/samples/native-config-integration/gradle.properties b/samples/native-config-integration/gradle.properties index ce717b95b..29748bf5b 100644 --- a/samples/native-config-integration/gradle.properties +++ b/samples/native-config-integration/gradle.properties @@ -1,3 +1,3 @@ -native.gradle.plugin.version = 0.9.12 +native.gradle.plugin.version = 0.9.13-SNAPSHOT junit.jupiter.version = 5.8.1 junit.platform.version = 1.8.1 diff --git a/samples/native-config-integration/pom.xml b/samples/native-config-integration/pom.xml index 00d276b37..959cf5113 100644 --- a/samples/native-config-integration/pom.xml +++ b/samples/native-config-integration/pom.xml @@ -51,8 +51,8 @@ 1.8 UTF-8 - 0.9.12 - 0.9.12 + 0.9.13-SNAPSHOT + 0.9.13-SNAPSHOT example-app org.graalvm.example.Application From 536fd980f82c6d3b59c5ad60e7878a69ba0959bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lazar=20Mitrovi=C4=87?= Date: Mon, 27 Jun 2022 22:35:15 +0200 Subject: [PATCH 02/27] Restore NativeImagePlugin.NATIVE_TEST_EXTENSION --- .../java/org/graalvm/buildtools/gradle/NativeImagePlugin.java | 3 ++- 1 file changed, 2 insertions(+), 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 f7dc15a66..3fed1282d 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 @@ -139,6 +139,7 @@ public class NativeImagePlugin implements Plugin { public static final String NATIVE_TEST_COMPILE_TASK_NAME = "nativeTestCompile"; public static final String NATIVE_TEST_TASK_NAME = "nativeTest"; public static final String NATIVE_MAIN_EXTENSION = "main"; + public static final String NATIVE_TEST_EXTENSION = "test"; public static final String DEPRECATED_NATIVE_BUILD_EXTENSION = "nativeBuild"; public static final String DEPRECATED_NATIVE_TEST_EXTENSION = "nativeTest"; @@ -248,7 +249,7 @@ private void configureJavaProject(Project project, Provider t.doFirst("Warn about deprecation", task -> task.getLogger().warn("Task " + DEPRECATED_NATIVE_BUILD_TASK + " is deprecated. Use " + NATIVE_COMPILE_TASK_NAME + " instead.")); }); - graalExtension.registerTestBinary("test", config -> { + graalExtension.registerTestBinary(NATIVE_TEST_EXTENSION, config -> { config.forTestTask(tasks.named("test", Test.class)); config.usingSourceSet(GradleUtils.findSourceSet(project, SourceSet.TEST_SOURCE_SET_NAME)); }); From dc37d5803717aaaa274220b1b36ce4770ebfc5c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lazar=20Mitrovi=C4=87?= Date: Mon, 27 Jun 2022 22:39:57 +0200 Subject: [PATCH 03/27] Change reachability metadata fallback path --- .../modules/StandardLocationModuleToConfigDirectoryIndex.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/jvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/index/modules/StandardLocationModuleToConfigDirectoryIndex.java b/common/jvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/index/modules/StandardLocationModuleToConfigDirectoryIndex.java index d8d8a82a0..d93330f14 100644 --- a/common/jvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/index/modules/StandardLocationModuleToConfigDirectoryIndex.java +++ b/common/jvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/index/modules/StandardLocationModuleToConfigDirectoryIndex.java @@ -54,7 +54,7 @@ public StandardLocationModuleToConfigDirectoryIndex(Path rootPath) { @Override public Set findConfigurationDirectories(String groupId, String artifactId) { - Path candidate = rootPath.resolve(groupId.replace('.', '/') + "/" + artifactId); + Path candidate = rootPath.resolve(groupId + "/" + artifactId); if (Files.isDirectory(candidate)) { return Collections.singleton(candidate); } From a6bba3cd45ad55b016824c5afac83a0da77ba306 Mon Sep 17 00:00:00 2001 From: Aleksandar Gradinac Date: Tue, 28 Jun 2022 13:19:03 +0200 Subject: [PATCH 04/27] Remove usage of GuardedAnnotationAccess. Initialize enum used in an annotation at build time --- .../junit/platform/config/jupiter/JupiterConfigProvider.java | 3 ++- .../graalvm/junit/platform/config/util/AnnotationUtils.java | 3 +-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/common/junit-platform-native/src/main/java/org/graalvm/junit/platform/config/jupiter/JupiterConfigProvider.java b/common/junit-platform-native/src/main/java/org/graalvm/junit/platform/config/jupiter/JupiterConfigProvider.java index 4e8c9dd21..25762dbc9 100644 --- a/common/junit-platform-native/src/main/java/org/graalvm/junit/platform/config/jupiter/JupiterConfigProvider.java +++ b/common/junit-platform-native/src/main/java/org/graalvm/junit/platform/config/jupiter/JupiterConfigProvider.java @@ -79,7 +79,8 @@ public void onLoad(NativeImageConfiguration config) { "org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor", "org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor", "org.junit.jupiter.engine.execution.ConditionEvaluator", - "org.junit.jupiter.engine.execution.ExecutableInvoker" + "org.junit.jupiter.engine.execution.ExecutableInvoker", + "org.junit.jupiter.params.provider.EnumSource$Mode", }; for (String className : buildTimeInitializedClasses) { config.initializeAtBuildTime(className); diff --git a/common/junit-platform-native/src/main/java/org/graalvm/junit/platform/config/util/AnnotationUtils.java b/common/junit-platform-native/src/main/java/org/graalvm/junit/platform/config/util/AnnotationUtils.java index a882afd8f..a04962e62 100644 --- a/common/junit-platform-native/src/main/java/org/graalvm/junit/platform/config/util/AnnotationUtils.java +++ b/common/junit-platform-native/src/main/java/org/graalvm/junit/platform/config/util/AnnotationUtils.java @@ -42,7 +42,6 @@ package org.graalvm.junit.platform.config.util; import org.graalvm.junit.platform.config.core.NativeImageConfiguration; -import org.graalvm.util.GuardedAnnotationAccess; import org.junit.platform.commons.support.AnnotationSupport; import java.lang.annotation.Annotation; @@ -96,7 +95,7 @@ private static void forEachMethod(Class clazz, Consumer consumer) { } private static List getAnnotations(AnnotatedElement element, Class annotation) { - if (GuardedAnnotationAccess.getAnnotation(annotation, Repeatable.class) != null) { + if (annotation.getAnnotation(Repeatable.class) != null) { return AnnotationSupport.findRepeatableAnnotations(element, annotation); } else { Optional optionalAnnotation = AnnotationSupport.findAnnotation(element, annotation); From 75a19da8ecab498a822085801e2b96298cec5c45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lazar=20Mitrovi=C4=87?= Date: Tue, 28 Jun 2022 14:00:09 +0200 Subject: [PATCH 05/27] Fix reachability metadata tests --- .../internal/FileSystemRepositoryTest.java | 16 ++++++++-------- ...uleJsonVersionToConfigDirectoryIndexTest.java | 10 +++++----- ...leSystemModuleToConfigDirectoryIndexTest.java | 6 +++--- .../JsonModuleToConfigDirectoryIndexTest.java | 6 +++--- ...LocationModuleToConfigDirectoryIndexTest.java | 2 +- .../test/resources/json/artifact-1/index.json | 6 +++--- .../resources/json/modules/multi-dirs/index.json | 2 +- .../{ => io.netty}/netty-core/placeholder.txt | 0 .../resources/json/modules/single-dir/index.json | 2 +- .../netty-core/placeholder.txt | 0 .../repo1/org/foo/{1 => 1.0}/reflect-config.json | 0 .../repo1/org/foo/{2 => 1.1}/reflect-config.json | 0 .../resources/repos/repo1/org/foo/index.json | 4 ++-- .../repo2/org/foo/{1 => 1.0}/reflect-config.json | 0 .../repo2/org/foo/{2 => 1.1}/reflect-config.json | 0 .../resources/repos/repo2/org/foo/index.json | 6 +++--- 16 files changed, 30 insertions(+), 30 deletions(-) rename common/jvm-reachability-metadata/src/test/resources/json/modules/multi-dirs/{ => io.netty}/netty-core/placeholder.txt (100%) rename common/jvm-reachability-metadata/src/test/resources/json/modules/single-dir/{io/netty => io.netty}/netty-core/placeholder.txt (100%) rename common/jvm-reachability-metadata/src/test/resources/repos/repo1/org/foo/{1 => 1.0}/reflect-config.json (100%) rename common/jvm-reachability-metadata/src/test/resources/repos/repo1/org/foo/{2 => 1.1}/reflect-config.json (100%) rename common/jvm-reachability-metadata/src/test/resources/repos/repo2/org/foo/{1 => 1.0}/reflect-config.json (100%) rename common/jvm-reachability-metadata/src/test/resources/repos/repo2/org/foo/{2 => 1.1}/reflect-config.json (100%) diff --git a/common/jvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/FileSystemRepositoryTest.java b/common/jvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/FileSystemRepositoryTest.java index 60ac40d20..65c663116 100644 --- a/common/jvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/FileSystemRepositoryTest.java +++ b/common/jvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/FileSystemRepositoryTest.java @@ -64,13 +64,13 @@ void testRepo1() { lookup("org:foo:1.0"); // then: - result.hasSinglePath("org/foo/1"); + result.hasSinglePath("org/foo/1.0"); // when: lookup("org:foo:1.1"); // then: - result.hasSinglePath("org/foo/2"); + result.hasSinglePath("org/foo/1.1"); // when: lookup("org:foo:1.2"); @@ -86,7 +86,7 @@ void testRepo2() { lookup("org:bar:2.1"); // then: - result.hasSinglePath("org/foo/2"); + result.hasSinglePath("org/foo/1.1"); } @Test @@ -99,7 +99,7 @@ void canDefaultToLatestConfigDir() { }); // then: - result.hasSinglePath("org/foo/2"); + result.hasSinglePath("org/foo/1.1"); //when: "order of spec shouldn't matter" lookup(q -> { @@ -108,7 +108,7 @@ void canDefaultToLatestConfigDir() { }); // then: - result.hasSinglePath("org/foo/2"); + result.hasSinglePath("org/foo/1.1"); } @Test @@ -118,11 +118,11 @@ void canForceToParticularConfigVersion() { lookup(q -> q.forArtifact(artifact -> { artifact.gav("org:foo:1.2"); - artifact.forceConfigVersion("1"); + artifact.forceConfigVersion("1.0"); })); // then: - result.hasSinglePath("org/foo/1"); + result.hasSinglePath("org/foo/1.0"); } @Test @@ -149,7 +149,7 @@ void canUseLatestConfigDir() { })); // then: - result.hasSinglePath("org/foo/2"); + result.hasSinglePath("org/foo/1.1"); // when: lookup(q -> { diff --git a/common/jvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/index/artifacts/SingleModuleJsonVersionToConfigDirectoryIndexTest.java b/common/jvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/index/artifacts/SingleModuleJsonVersionToConfigDirectoryIndexTest.java index 38f806e21..4cf3384e3 100644 --- a/common/jvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/index/artifacts/SingleModuleJsonVersionToConfigDirectoryIndexTest.java +++ b/common/jvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/index/artifacts/SingleModuleJsonVersionToConfigDirectoryIndexTest.java @@ -63,29 +63,29 @@ void checkIndex() throws URISyntaxException { Optional configDir = index.findConfigurationDirectory("com.foo", "bar", "1.0"); assertTrue(configDir.isPresent()); - assertEquals(repoPath.resolve("1"), configDir.get()); + assertEquals(repoPath.resolve("1.0"), configDir.get()); configDir = index.findConfigurationDirectory("com.foo", "bar", "1.3"); assertTrue(configDir.isPresent()); - assertEquals(repoPath.resolve("1"), configDir.get()); + assertEquals(repoPath.resolve("1.0"), configDir.get()); configDir = index.findConfigurationDirectory("com.foo", "bar", "2.0"); assertTrue(configDir.isPresent()); - assertEquals(repoPath.resolve("2"), configDir.get()); + assertEquals(repoPath.resolve("2.0"), configDir.get()); configDir = index.findConfigurationDirectory("com.foo", "bar", "2.5"); assertFalse(configDir.isPresent()); configDir = index.findConfigurationDirectory("com.foo", "bar-all", "2.0"); assertTrue(configDir.isPresent()); - assertEquals(repoPath.resolve("2"), configDir.get()); + assertEquals(repoPath.resolve("2.0"), configDir.get()); configDir = index.findConfigurationDirectory("com.foo", "nope", "1.0"); assertFalse(configDir.isPresent()); Optional latest = index.findLatestConfigurationFor("com.foo", "bar"); assertTrue(latest.isPresent()); - assertEquals(repoPath.resolve("2"), latest.get()); + assertEquals(repoPath.resolve("2.0"), latest.get()); } diff --git a/common/jvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/index/modules/FileSystemModuleToConfigDirectoryIndexTest.java b/common/jvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/index/modules/FileSystemModuleToConfigDirectoryIndexTest.java index 11102b826..229d0bc11 100644 --- a/common/jvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/index/modules/FileSystemModuleToConfigDirectoryIndexTest.java +++ b/common/jvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/index/modules/FileSystemModuleToConfigDirectoryIndexTest.java @@ -63,10 +63,10 @@ class FileSystemModuleToConfigDirectoryIndexTest { void returnsSingleDirectory() throws IOException, URISyntaxException { writeIndex("single-dir"); Set configurationDirectories = index.findConfigurationDirectories("io.netty", "netty-core"); - assertEquals(singleton(repoPath.resolve("io/netty/netty-core")), configurationDirectories); + assertEquals(singleton(repoPath.resolve("io.netty/netty-core")), configurationDirectories); configurationDirectories = index.findConfigurationDirectories("io.netty", "netty-all"); - assertEquals(singleton(repoPath.resolve("io/netty/netty-core")), configurationDirectories); + assertEquals(singleton(repoPath.resolve("io.netty/netty-core")), configurationDirectories); configurationDirectories = index.findConfigurationDirectories("org", "bar"); assertEquals(singleton(repoPath.resolve("org/bar")), configurationDirectories); @@ -77,7 +77,7 @@ void returnsMultipleDirectories() throws IOException, URISyntaxException { writeIndex("multi-dirs"); Set configurationDirectories = index.findConfigurationDirectories("io.netty", "netty-all"); assertEquals(new HashSet<>(asList( - repoPath.resolve("io/netty/netty-core"), + repoPath.resolve("io.netty/netty-core"), repoPath.resolve("jline") )), configurationDirectories); diff --git a/common/jvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/index/modules/JsonModuleToConfigDirectoryIndexTest.java b/common/jvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/index/modules/JsonModuleToConfigDirectoryIndexTest.java index eca5987d8..c0d6f8380 100644 --- a/common/jvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/index/modules/JsonModuleToConfigDirectoryIndexTest.java +++ b/common/jvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/index/modules/JsonModuleToConfigDirectoryIndexTest.java @@ -63,10 +63,10 @@ class JsonModuleToConfigDirectoryIndexTest { void returnsSingleDirectory() throws URISyntaxException { writeIndex("single-dir"); Set configurationDirectories = index.findConfigurationDirectories("io.netty", "netty-core"); - assertEquals(singleton(repoPath.resolve("io/netty/netty-core")), configurationDirectories); + assertEquals(singleton(repoPath.resolve("io.netty/netty-core")), configurationDirectories); configurationDirectories = index.findConfigurationDirectories("io.netty", "netty-all"); - assertEquals(singleton(repoPath.resolve("io/netty/netty-core")), configurationDirectories); + assertEquals(singleton(repoPath.resolve("io.netty/netty-core")), configurationDirectories); configurationDirectories = index.findConfigurationDirectories("org", "bar"); assertEquals(emptySet(), configurationDirectories); @@ -77,7 +77,7 @@ void returnsMultipleDirectories() throws URISyntaxException { writeIndex("multi-dirs"); Set configurationDirectories = index.findConfigurationDirectories("io.netty", "netty-all"); assertEquals(new HashSet<>(asList( - repoPath.resolve("io/netty/netty-core"), + repoPath.resolve("io.netty/netty-core"), repoPath.resolve("jline") )), configurationDirectories); diff --git a/common/jvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/index/modules/StandardLocationModuleToConfigDirectoryIndexTest.java b/common/jvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/index/modules/StandardLocationModuleToConfigDirectoryIndexTest.java index 8b866066c..adcbeb65b 100644 --- a/common/jvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/index/modules/StandardLocationModuleToConfigDirectoryIndexTest.java +++ b/common/jvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/index/modules/StandardLocationModuleToConfigDirectoryIndexTest.java @@ -67,7 +67,7 @@ void setUp() { @Test void returnsConventionalConfigLocation() throws IOException { - Path localDir = tempDir.resolve("org/module/foo"); + Path localDir = tempDir.resolve("org.module/foo"); Files.createDirectories(localDir); Set configurationDirectories = index.findConfigurationDirectories("org.module", "foo"); assertEquals(singleton(localDir), configurationDirectories); diff --git a/common/jvm-reachability-metadata/src/test/resources/json/artifact-1/index.json b/common/jvm-reachability-metadata/src/test/resources/json/artifact-1/index.json index ad650cfc3..63370f676 100644 --- a/common/jvm-reachability-metadata/src/test/resources/json/artifact-1/index.json +++ b/common/jvm-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" }, - { "module": "com.foo:bar", "tested-versions": ["2.0", "2.1"], "metadata-version": "2", "latest": true }, - { "module": "com.foo:bar-all", "tested-versions": ["2.0", "2.1"], "metadata-version": "2" } + { "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-all", "tested-versions": ["2.0", "2.1"], "metadata-version": "2.0" } ] diff --git a/common/jvm-reachability-metadata/src/test/resources/json/modules/multi-dirs/index.json b/common/jvm-reachability-metadata/src/test/resources/json/modules/multi-dirs/index.json index b6e62fcce..f0b9f5906 100644 --- a/common/jvm-reachability-metadata/src/test/resources/json/modules/multi-dirs/index.json +++ b/common/jvm-reachability-metadata/src/test/resources/json/modules/multi-dirs/index.json @@ -1,5 +1,5 @@ [ - { "module": "io.netty:netty-core", "directory": "io/netty/netty-core"}, + { "module": "io.netty:netty-core", "directory": "io.netty/netty-core"}, { "module": "org.jline:jline", "directory": "jline"}, { "module": "io.netty:netty-all", "requires": ["io.netty:netty-core", "org.jline:jline"] diff --git a/common/jvm-reachability-metadata/src/test/resources/json/modules/multi-dirs/netty-core/placeholder.txt b/common/jvm-reachability-metadata/src/test/resources/json/modules/multi-dirs/io.netty/netty-core/placeholder.txt similarity index 100% rename from common/jvm-reachability-metadata/src/test/resources/json/modules/multi-dirs/netty-core/placeholder.txt rename to common/jvm-reachability-metadata/src/test/resources/json/modules/multi-dirs/io.netty/netty-core/placeholder.txt diff --git a/common/jvm-reachability-metadata/src/test/resources/json/modules/single-dir/index.json b/common/jvm-reachability-metadata/src/test/resources/json/modules/single-dir/index.json index 12872860b..674513410 100644 --- a/common/jvm-reachability-metadata/src/test/resources/json/modules/single-dir/index.json +++ b/common/jvm-reachability-metadata/src/test/resources/json/modules/single-dir/index.json @@ -1,5 +1,5 @@ [ - { "module": "io.netty:netty-core", "directory": "io/netty/netty-core"}, + { "module": "io.netty:netty-core", "directory": "io.netty/netty-core"}, { "module": "org.jline:jline", "directory": "jline"}, { "module": "io.netty:netty-all", "requires": ["io.netty:netty-core"] diff --git a/common/jvm-reachability-metadata/src/test/resources/json/modules/single-dir/io/netty/netty-core/placeholder.txt b/common/jvm-reachability-metadata/src/test/resources/json/modules/single-dir/io.netty/netty-core/placeholder.txt similarity index 100% rename from common/jvm-reachability-metadata/src/test/resources/json/modules/single-dir/io/netty/netty-core/placeholder.txt rename to common/jvm-reachability-metadata/src/test/resources/json/modules/single-dir/io.netty/netty-core/placeholder.txt diff --git a/common/jvm-reachability-metadata/src/test/resources/repos/repo1/org/foo/1/reflect-config.json b/common/jvm-reachability-metadata/src/test/resources/repos/repo1/org/foo/1.0/reflect-config.json similarity index 100% rename from common/jvm-reachability-metadata/src/test/resources/repos/repo1/org/foo/1/reflect-config.json rename to common/jvm-reachability-metadata/src/test/resources/repos/repo1/org/foo/1.0/reflect-config.json diff --git a/common/jvm-reachability-metadata/src/test/resources/repos/repo1/org/foo/2/reflect-config.json b/common/jvm-reachability-metadata/src/test/resources/repos/repo1/org/foo/1.1/reflect-config.json similarity index 100% rename from common/jvm-reachability-metadata/src/test/resources/repos/repo1/org/foo/2/reflect-config.json rename to common/jvm-reachability-metadata/src/test/resources/repos/repo1/org/foo/1.1/reflect-config.json diff --git a/common/jvm-reachability-metadata/src/test/resources/repos/repo1/org/foo/index.json b/common/jvm-reachability-metadata/src/test/resources/repos/repo1/org/foo/index.json index cef1cc778..980fe87e7 100644 --- a/common/jvm-reachability-metadata/src/test/resources/repos/repo1/org/foo/index.json +++ b/common/jvm-reachability-metadata/src/test/resources/repos/repo1/org/foo/index.json @@ -4,14 +4,14 @@ "tested-versions": [ "1.0" ], - "metadata-version": "1" + "metadata-version": "1.0" }, { "module": "org:foo", "tested-versions": [ "1.1" ], - "metadata-version": "2", + "metadata-version": "1.1", "latest": true } ] diff --git a/common/jvm-reachability-metadata/src/test/resources/repos/repo2/org/foo/1/reflect-config.json b/common/jvm-reachability-metadata/src/test/resources/repos/repo2/org/foo/1.0/reflect-config.json similarity index 100% rename from common/jvm-reachability-metadata/src/test/resources/repos/repo2/org/foo/1/reflect-config.json rename to common/jvm-reachability-metadata/src/test/resources/repos/repo2/org/foo/1.0/reflect-config.json diff --git a/common/jvm-reachability-metadata/src/test/resources/repos/repo2/org/foo/2/reflect-config.json b/common/jvm-reachability-metadata/src/test/resources/repos/repo2/org/foo/1.1/reflect-config.json similarity index 100% rename from common/jvm-reachability-metadata/src/test/resources/repos/repo2/org/foo/2/reflect-config.json rename to common/jvm-reachability-metadata/src/test/resources/repos/repo2/org/foo/1.1/reflect-config.json diff --git a/common/jvm-reachability-metadata/src/test/resources/repos/repo2/org/foo/index.json b/common/jvm-reachability-metadata/src/test/resources/repos/repo2/org/foo/index.json index 82b6277d0..b2d751163 100644 --- a/common/jvm-reachability-metadata/src/test/resources/repos/repo2/org/foo/index.json +++ b/common/jvm-reachability-metadata/src/test/resources/repos/repo2/org/foo/index.json @@ -1,5 +1,5 @@ [ - { "module": "org:foo", "tested-versions": ["1.0"], "metadata-version": "1" }, - { "module": "org:foo", "tested-versions": ["1.1"], "metadata-version": "2" }, - { "module": "org:bar", "tested-versions": ["2.1"], "metadata-version": "2" } + { "module": "org:foo", "tested-versions": ["1.0"], "metadata-version": "1.0" }, + { "module": "org:foo", "tested-versions": ["1.1"], "metadata-version": "1.1" }, + { "module": "org:bar", "tested-versions": ["2.1"], "metadata-version": "1.1" } ] From 3933530872a6935e2c4c744859588e3be4fbb593 Mon Sep 17 00:00:00 2001 From: Aleksandar Gradinac Date: Tue, 28 Jun 2022 14:13:09 +0200 Subject: [PATCH 06/27] Remove unnecessary checkstyle rule regarding GuardedAnnotationAccess --- config/checkstyle.xml | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/config/checkstyle.xml b/config/checkstyle.xml index 69feab659..0aea45ea4 100644 --- a/config/checkstyle.xml +++ b/config/checkstyle.xml @@ -18,20 +18,6 @@ - - - - - - - - - From 86ad617b395f87cd18fdbe0807c2dd7d2a4fa028 Mon Sep 17 00:00:00 2001 From: Aleksandar Gradinac Date: Tue, 28 Jun 2022 14:20:50 +0200 Subject: [PATCH 07/27] Document changes in the release notes --- docs/src/docs/asciidoc/index.adoc | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/src/docs/asciidoc/index.adoc b/docs/src/docs/asciidoc/index.adoc index 608813e3c..ef5a02ff3 100644 --- a/docs/src/docs/asciidoc/index.adoc +++ b/docs/src/docs/asciidoc/index.adoc @@ -16,6 +16,14 @@ If you are using alternative build systems, see < Date: Tue, 28 Jun 2022 18:20:03 +0200 Subject: [PATCH 08/27] Bump test version to 0.9.13-SNAPSHOT --- samples/java-application-with-custom-packaging/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/java-application-with-custom-packaging/pom.xml b/samples/java-application-with-custom-packaging/pom.xml index a1f790d91..b6f65cdda 100644 --- a/samples/java-application-with-custom-packaging/pom.xml +++ b/samples/java-application-with-custom-packaging/pom.xml @@ -61,7 +61,7 @@ 3.3.4 org.graalvm.demo.Application netty - 0.9.12-SNAPSHOT + 0.9.13-SNAPSHOT From 41f81e57db0ac795c59128387f2c50c04787bdf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lazar=20Mitrovi=C4=87?= Date: Wed, 29 Jun 2022 15:51:47 +0200 Subject: [PATCH 09/27] Fix config sample --- .../library-with-reflection/1/reflect-config.json | 0 .../library-with-reflection/index.json | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename samples/native-config-integration/config-directory/{org/graalvm/internal => org.graalvm.internal}/library-with-reflection/1/reflect-config.json (100%) rename samples/native-config-integration/config-directory/{org/graalvm/internal => org.graalvm.internal}/library-with-reflection/index.json (100%) diff --git a/samples/native-config-integration/config-directory/org/graalvm/internal/library-with-reflection/1/reflect-config.json b/samples/native-config-integration/config-directory/org.graalvm.internal/library-with-reflection/1/reflect-config.json similarity index 100% rename from samples/native-config-integration/config-directory/org/graalvm/internal/library-with-reflection/1/reflect-config.json rename to samples/native-config-integration/config-directory/org.graalvm.internal/library-with-reflection/1/reflect-config.json diff --git a/samples/native-config-integration/config-directory/org/graalvm/internal/library-with-reflection/index.json b/samples/native-config-integration/config-directory/org.graalvm.internal/library-with-reflection/index.json similarity index 100% rename from samples/native-config-integration/config-directory/org/graalvm/internal/library-with-reflection/index.json rename to samples/native-config-integration/config-directory/org.graalvm.internal/library-with-reflection/index.json From cd1d951c8e6bfd2a382ee48c91f6124552b72ccd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lazar=20Mitrovi=C4=87?= Date: Wed, 29 Jun 2022 16:56:37 +0200 Subject: [PATCH 10/27] Fix metadata tests --- .../graalvm/buildtools/utils/FileUtilsTest.java | 16 ++++++++-------- .../gradle/NativeConfigRepoFunctionalTest.groovy | 2 +- .../MetadataRepositoryFunctionalTest.groovy | 6 +++--- 3 files changed, 12 insertions(+), 12 deletions(-) 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 661a4777b..3cb76d5d9 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 @@ -90,14 +90,14 @@ void testExtract(@TempDir Path tempDir) throws IOException { 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"))); - assertTrue(Files.isDirectory(tempDir.resolve("org/graalvm/internal/library-with-reflection/1"))); - - assertTrue(Files.exists(tempDir.resolve("org/graalvm/internal/library-with-reflection/1/reflect-config.json"))); - assertEquals("[ { \"name\": \"org.graalvm.internal.reflect.Message\", \"allDeclaredFields\": true, \"allDeclaredMethods\": true }]", String.join("", Files.readAllLines(tempDir.resolve("org/graalvm/internal/library-with-reflection/1/reflect-config.json")))); + 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"))); + assertTrue(Files.isDirectory(tempDir.resolve("org.graalvm.internal/library-with-reflection/1"))); + + assertTrue(Files.exists(tempDir.resolve("org.graalvm.internal/library-with-reflection/1/reflect-config.json"))); + assertEquals("[ { \"name\": \"org.graalvm.internal.reflect.Message\", \"allDeclaredFields\": true, \"allDeclaredMethods\": true }]", String.join("", Files.readAllLines(tempDir.resolve("org.graalvm.internal/library-with-reflection/1/reflect-config.json")))); } @Test @DisplayName("It is protected against ZIP slip attacks") diff --git a/native-gradle-plugin/src/functionalTest/groovy/org/graalvm/buildtools/gradle/NativeConfigRepoFunctionalTest.groovy b/native-gradle-plugin/src/functionalTest/groovy/org/graalvm/buildtools/gradle/NativeConfigRepoFunctionalTest.groovy index 043e5ad37..30d067106 100644 --- a/native-gradle-plugin/src/functionalTest/groovy/org/graalvm/buildtools/gradle/NativeConfigRepoFunctionalTest.groovy +++ b/native-gradle-plugin/src/functionalTest/groovy/org/graalvm/buildtools/gradle/NativeConfigRepoFunctionalTest.groovy @@ -78,7 +78,7 @@ class NativeConfigRepoFunctionalTest extends AbstractFunctionalTest { outputContains "[graalvm reachability metadata repository for org.graalvm.internal:library-with-reflection:1.5]: Configuration directory not found. Trying latest version." and: "but finds one thanks to the latest configuration field" - outputContains "[graalvm reachability metadata repository for org.graalvm.internal:library-with-reflection:1.5]: Configuration directory is org/graalvm/internal/library-with-reflection/1" + outputContains "[graalvm reachability metadata repository for org.graalvm.internal:library-with-reflection:1.5]: Configuration directory is org.graalvm.internal/library-with-reflection/1" where: format | label diff --git a/native-maven-plugin/src/functionalTest/groovy/org/graalvm/buildtools/maven/MetadataRepositoryFunctionalTest.groovy b/native-maven-plugin/src/functionalTest/groovy/org/graalvm/buildtools/maven/MetadataRepositoryFunctionalTest.groovy index 0f72f9c0f..5d5483278 100644 --- a/native-maven-plugin/src/functionalTest/groovy/org/graalvm/buildtools/maven/MetadataRepositoryFunctionalTest.groovy +++ b/native-maven-plugin/src/functionalTest/groovy/org/graalvm/buildtools/maven/MetadataRepositoryFunctionalTest.groovy @@ -83,7 +83,7 @@ class MetadataRepositoryFunctionalTest extends AbstractGraalVMMavenFunctionalTes outputContains "[graalvm reachability metadata repository for org.graalvm.internal:library-with-reflection:1.5]: Configuration directory not found. Trying latest version." and: "but it finds one thanks to the latest configuration field" - outputContains "[graalvm reachability metadata repository for org.graalvm.internal:library-with-reflection:1.5]: Configuration directory is org/graalvm/internal/library-with-reflection/1" + outputContains "[graalvm reachability metadata repository for org.graalvm.internal:library-with-reflection:1.5]: Configuration directory is org.graalvm.internal/library-with-reflection/1" } void "if excludeConfig is set it is added to the command line invocation"() { @@ -151,7 +151,7 @@ class MetadataRepositoryFunctionalTest extends AbstractGraalVMMavenFunctionalTes outputContains "[graalvm reachability metadata repository for org.graalvm.internal:library-with-reflection:1.5]: Configuration directory not found. Trying latest version." and: "but it finds one thanks to the latest configuration field" - outputContains "[graalvm reachability metadata repository for org.graalvm.internal:library-with-reflection:1.5]: Configuration directory is org/graalvm/internal/library-with-reflection/1" + outputContains "[graalvm reachability metadata repository for org.graalvm.internal:library-with-reflection:1.5]: Configuration directory is org.graalvm.internal/library-with-reflection/1" } void "it can download a remote repository"() { @@ -171,7 +171,7 @@ class MetadataRepositoryFunctionalTest extends AbstractGraalVMMavenFunctionalTes outputContains "[graalvm reachability metadata repository for org.graalvm.internal:library-with-reflection:1.5]: Configuration directory not found. Trying latest version." and: "but it finds one thanks to the latest configuration field" - outputContains "[graalvm reachability metadata repository for org.graalvm.internal:library-with-reflection:1.5]: Configuration directory is org/graalvm/internal/library-with-reflection/1" + outputContains "[graalvm reachability metadata repository for org.graalvm.internal:library-with-reflection:1.5]: Configuration directory is org.graalvm.internal/library-with-reflection/1" } void "when pointing to a missing URL, reflection fails"() { From c7f3d9caecc2632d83759c5ce6b21ea4f347c387 Mon Sep 17 00:00:00 2001 From: Aleksandar Gradinac Date: Thu, 30 Jun 2022 14:47:52 +0200 Subject: [PATCH 11/27] Support enabling the agent in the DSL --- .../org/graalvm/buildtools/gradle/NativeImagePlugin.java | 2 +- .../graalvm/buildtools/gradle/dsl/agent/AgentOptions.java | 7 +++++++ .../gradle/internal/DefaultGraalVmExtension.java | 1 + 3 files changed, 9 insertions(+), 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 3fed1282d..23a96dc06 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 @@ -523,7 +523,7 @@ private static Provider agentProperty(Project project, AgentOptions opti } return options.getDefaultMode().get(); }) - .orElse(project.provider(() -> "disabled")); + .orElse(options.getEnabled().map(enabled -> enabled ? options.getDefaultMode().get() : "disabled")); } private static void registerServiceProvider(Project project, Provider nativeImageServiceProvider) { diff --git a/native-gradle-plugin/src/main/java/org/graalvm/buildtools/gradle/dsl/agent/AgentOptions.java b/native-gradle-plugin/src/main/java/org/graalvm/buildtools/gradle/dsl/agent/AgentOptions.java index 590e5e274..4726f1d72 100644 --- a/native-gradle-plugin/src/main/java/org/graalvm/buildtools/gradle/dsl/agent/AgentOptions.java +++ b/native-gradle-plugin/src/main/java/org/graalvm/buildtools/gradle/dsl/agent/AgentOptions.java @@ -72,6 +72,13 @@ default void modes(Action spec) { @Optional Property getDefaultMode(); + /** + * Enables the agent. + */ + @Input + @Optional + Property getEnabled(); + /** * Caller-filter files that will be passed to the agent. */ diff --git a/native-gradle-plugin/src/main/java/org/graalvm/buildtools/gradle/internal/DefaultGraalVmExtension.java b/native-gradle-plugin/src/main/java/org/graalvm/buildtools/gradle/internal/DefaultGraalVmExtension.java index 96e377b37..f61a785f8 100644 --- a/native-gradle-plugin/src/main/java/org/graalvm/buildtools/gradle/internal/DefaultGraalVmExtension.java +++ b/native-gradle-plugin/src/main/java/org/graalvm/buildtools/gradle/internal/DefaultGraalVmExtension.java @@ -78,6 +78,7 @@ public DefaultGraalVmExtension(NamedDomainObjectContainer na AgentOptions agentOpts = getAgent(); agentOpts.getTasksToInstrumentPredicate().convention(t -> true); agentOpts.getDefaultMode().convention("standard"); + agentOpts.getEnabled().convention(false); agentOpts.getModes().getConditional().getParallel().convention(true); agentOpts.getMetadataCopy().getMergeWithExisting().convention(false); agentOpts.getFilterableEntries().convention(Arrays.asList("org.gradle.", "java.", "org.junit.")); From 48be6b869f8561325aa6f6055623e88bdf4bf290 Mon Sep 17 00:00:00 2001 From: Aleksandar Gradinac Date: Thu, 30 Jun 2022 14:49:16 +0200 Subject: [PATCH 12/27] Improve agent documentation --- docs/src/docs/asciidoc/gradle-plugin.adoc | 15 ++---- .../docs/snippets/gradle/groovy/build.gradle | 31 +---------- .../snippets/gradle/kotlin/build.gradle.kts | 51 ++++++++++++++++--- 3 files changed, 49 insertions(+), 48 deletions(-) diff --git a/docs/src/docs/asciidoc/gradle-plugin.adoc b/docs/src/docs/asciidoc/gradle-plugin.adoc index 3b82f7f6c..cb22ce530 100644 --- a/docs/src/docs/asciidoc/gradle-plugin.adoc +++ b/docs/src/docs/asciidoc/gradle-plugin.adoc @@ -156,6 +156,7 @@ If you do this, the plugin will search for 2 environment variables: `GRAALVM_HOM If one of them is set, it will assume that it points to a valid GraalVM installation and completely bypass toolchain selection. Therefore, it becomes your responsibility to make sure that the environment variable points to a JDK that is compatible with your build script requirements (in particular, the language version). +[[configuration-options]] ==== Configuration options The following configuration options are available for building images: @@ -349,18 +350,10 @@ The plugin will also substitute `{output_dir}` in the agent options to point to === Configuring agent options The native agent can be configured https://www.graalvm.org/reference-manual/native-image/Agent/[with additional options]. -This can be done using the `agent` configuration block: +This can be done using the `agent` configuration block. +Each agent option has a corresponding field in the DSL. +See <> for the full list of available options. -.Configuring agent options -[source, groovy, role="multi-language-sample"] ----- -include::../snippets/gradle/groovy/build.gradle[tags=add-agent-options] ----- - -[source, kotlin, role="multi-language-sample"] ----- -include::../snippets/gradle/kotlin/build.gradle.kts[tags=add-agent-options] ----- [[metadata-support]] == GraalVM Reachability Metadata Support diff --git a/docs/src/docs/snippets/gradle/groovy/build.gradle b/docs/src/docs/snippets/gradle/groovy/build.gradle index fd385b6c9..7f375d323 100644 --- a/docs/src/docs/snippets/gradle/groovy/build.gradle +++ b/docs/src/docs/snippets/gradle/groovy/build.gradle @@ -67,9 +67,9 @@ if (providers.environmentVariable("DISABLE_TOOLCHAIN").isPresent()) { // tag::all-config-options[] graalvmNative { - // Injects the native-image-agent into supported tasks if `-Pagent` is specified agent { defaultMode = "standard" // Default agent mode if one isn't specified using `-Pagent=mode_name` + enabled = true // Enables the agent modes { // The standard agent mode generates metadata without conditions. @@ -78,7 +78,7 @@ graalvmNative { // The conditional agent mode generates metadata with conditions. conditional { userCodeFilterPath = "path-to-filter.json" // Path to a filter file that determines classes which will be used in the metadata conditions. - extrFilterPath = "path-to-another-filter.json" // Optional, extra filter used to further filter the collected metadata. + extraFilterPath = "path-to-another-filter.json" // Optional, extra filter used to further filter the collected metadata. } // The direct agent mode allows users to directly pass options to the agent. direct { @@ -165,33 +165,6 @@ graalvmNative { } // end::disable-test-support[] -// tag::add-agent-options[] -graalvmNative { - binaries.configureEach { - agent { - options.add("experimental-class-loader-support") - } - } -} -// end::add-agent-options[] - -// tag::add-agent-options-individual[] -graalvmNative { - binaries { - main { - agent { - options.add("experimental-class-loader-support") - } - } - test { - agent { - options.add("access-filter-file=${projectDir}/src/test/resources/access-filter.json") - } - } - } -} -// end::add-agent-options-individual[] - // tag::enable-metadata-repository[] graalvmNative { metadataRepository { diff --git a/docs/src/docs/snippets/gradle/kotlin/build.gradle.kts b/docs/src/docs/snippets/gradle/kotlin/build.gradle.kts index b0ff46706..a19cf5ba2 100644 --- a/docs/src/docs/snippets/gradle/kotlin/build.gradle.kts +++ b/docs/src/docs/snippets/gradle/kotlin/build.gradle.kts @@ -68,6 +68,49 @@ if (providers.environmentVariable("DISABLE_TOOLCHAIN").isPresent()) { // tag::all-config-options[] graalvmNative { + agent { + defaultMode.set("standard") // Default agent mode if one isn't specified using `-Pagent=mode_name` + enabled.set(true) // Enables the agent + + modes { + // The standard agent mode generates metadata without conditions. + standard { + } + // The conditional agent mode generates metadata with conditions. + conditional { + userCodeFilterPath.set("path-to-filter.json") // Path to a filter file that determines classes which will be used in the metadata conditions. + extraFilterPath.set("path-to-another-filter.json") // Optional, extra filter used to further filter the collected metadata. + } + // The direct agent mode allows users to directly pass options to the agent. + direct { + // {output_dir} is a special string expanded by the plugin to where the agent files would usually be output. + options.add("config-output-dir={output_dir}") + options.add("experimental-configuration-with-origins") + } + } + + callerFilterFiles.from("filter.json") + accessFilterFiles.from("filter.json") + builtinCallerFilter.set(true) + builtinHeuristicFilter.set(true) + enableExperimentalPredefinedClasses.set(false) + enableExperimentalUnsafeAllocationTracing.set(false) + trackReflectionMetadata.set(true) + + // Copies metadata collected from tasks into the specified directories. + metadataCopy { + inputTaskNames.add("test") // Tasks previously executed with the agent attached. + outputDirectories.add("src/main/resources/META-INF/native-image") + mergeWithExisting.set(true) // Instead of copying, merge with existing metadata in the output directories. + } + + /* + By default, if `-Pagent` is specified, all tasks that extend JavaForkOptions are instrumented. + This can be limited to only specific tasks that match this predicate. + */ + tasksToInstrumentPredicate.set(t -> true) + } + binaries { named("main") { // Main options @@ -135,14 +178,6 @@ graalvmNative { } // end::custom-binary[] -// tag::add-agent-options[] -graalvmNative { - agent { - enableExperimentalPredefinedClasses = true - } -} -// end::add-agent-options[] - // tag::enable-metadata-repository[] graalvmNative { metadataRepository { From e53c5673ce5c3c16a870a8c38616cf9b5085ca08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lazar=20Mitrovi=C4=87?= Date: Thu, 30 Jun 2022 16:49:38 +0200 Subject: [PATCH 13/27] Bump dependency versions --- gradle/libs.versions.toml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index cce4b36be..24e4da915 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,20 +3,20 @@ nativeBuildTools = "0.9.13-SNAPSHOT" # External dependencies -spock = "2.0-groovy-3.0" -maven = "3.3.9" -mavenAnnotations = "3.5.1" -mavenEmbedder = "3.8.1" +spock = "2.1-groovy-3.0" +maven = "3.8.5" +mavenAnnotations = "3.6.4" +mavenEmbedder = "3.8.3" mavenWagon = "3.4.3" -graalvm = "21.1.0" -jackson = "2.12.4" +graalvm = "22.0.0" +jackson = "2.13.3" junitPlatform = "1.8.1" junitJupiter = "5.8.1" aether = "1.1.0" slf4j = "1.7.9" -groovy = "3.0.8" +groovy = "3.0.11" jgit = "5.12.0.202106070339-r" -jetty = "11.0.9" +jetty = "11.0.11" [libraries] # Local projects From 4fd1a3ce04f2f7946c5d456ed564cfd4538ebb75 Mon Sep 17 00:00:00 2001 From: Cedric Champeau Date: Mon, 4 Jul 2022 14:44:49 +0200 Subject: [PATCH 14/27] Rename `jvm-reachability-metadata` -> `graalvm-reachability-metadata` --- .github/workflows/test-graalvm-metadata.yml | 10 +++++----- .../LICENSE | 0 .../build.gradle.kts | 0 .../gradle/native-image-testing.gradle | 0 .../gradle/wrapper/gradle-wrapper.jar | Bin .../gradle/wrapper/gradle-wrapper.properties | 0 .../gradlew | 0 .../gradlew.bat | 0 .../settings.gradle.kts | 2 +- .../GraalVMReachabilityMetadataRepository.java | 0 .../main/java/org/graalvm/reachability/Query.java | 0 .../reachability/internal/DefaultArtifactQuery.java | 0 .../graalvm/reachability/internal/DefaultQuery.java | 0 .../reachability/internal/FileSystemRepository.java | 0 .../reachability/internal/UncheckedIOException.java | 0 .../internal/index/artifacts/Artifact.java | 0 ...ngleModuleJsonVersionToConfigDirectoryIndex.java | 0 .../artifacts/VersionToConfigDirectoryIndex.java | 0 .../FileSystemModuleToConfigDirectoryIndex.java | 0 .../modules/JsonModuleToConfigDirectoryIndex.java | 0 .../internal/index/modules/ModuleEntry.java | 0 .../index/modules/ModuleToConfigDirectoryIndex.java | 0 ...tandardLocationModuleToConfigDirectoryIndex.java | 0 .../internal/FileSystemRepositoryTest.java | 0 ...ModuleJsonVersionToConfigDirectoryIndexTest.java | 0 .../FileSystemModuleToConfigDirectoryIndexTest.java | 0 .../JsonModuleToConfigDirectoryIndexTest.java | 0 ...ardLocationModuleToConfigDirectoryIndexTest.java | 0 .../src/test/resources/json/artifact-1/index.json | 0 .../resources/json/modules/multi-dirs/index.json | 0 .../multi-dirs/io.netty/netty-core/placeholder.txt | 0 .../json/modules/multi-dirs/jline/placeholder.txt | 0 .../json/modules/multi-dirs/org/bar/placeholder.txt | 0 .../resources/json/modules/single-dir/index.json | 0 .../single-dir/io.netty/netty-core/placeholder.txt | 0 .../json/modules/single-dir/jline/placeholder.txt | 0 .../json/modules/single-dir/org/bar/placeholder.txt | 0 .../src/test/resources/repos/repo1/index.json | 0 .../repos/repo1/org/foo/1.0/reflect-config.json | 0 .../repos/repo1/org/foo/1.1/reflect-config.json | 0 .../test/resources/repos/repo1/org/foo/index.json | 0 .../src/test/resources/repos/repo2/index.json | 0 .../repos/repo2/org/foo/1.0/reflect-config.json | 0 .../repos/repo2/org/foo/1.1/reflect-config.json | 0 .../test/resources/repos/repo2/org/foo/index.json | 0 gradle/libs.versions.toml | 2 +- native-maven-plugin/settings.gradle.kts | 2 +- settings.gradle.kts | 2 +- 48 files changed, 9 insertions(+), 9 deletions(-) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/LICENSE (100%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/build.gradle.kts (100%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/gradle/native-image-testing.gradle (100%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/gradle/wrapper/gradle-wrapper.jar (100%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/gradle/wrapper/gradle-wrapper.properties (100%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/gradlew (100%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/gradlew.bat (100%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/settings.gradle.kts (97%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/src/main/java/org/graalvm/reachability/GraalVMReachabilityMetadataRepository.java (100%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/src/main/java/org/graalvm/reachability/Query.java (100%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/src/main/java/org/graalvm/reachability/internal/DefaultArtifactQuery.java (100%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/src/main/java/org/graalvm/reachability/internal/DefaultQuery.java (100%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/src/main/java/org/graalvm/reachability/internal/FileSystemRepository.java (100%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/src/main/java/org/graalvm/reachability/internal/UncheckedIOException.java (100%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/src/main/java/org/graalvm/reachability/internal/index/artifacts/Artifact.java (100%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/src/main/java/org/graalvm/reachability/internal/index/artifacts/SingleModuleJsonVersionToConfigDirectoryIndex.java (100%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/src/main/java/org/graalvm/reachability/internal/index/artifacts/VersionToConfigDirectoryIndex.java (100%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/src/main/java/org/graalvm/reachability/internal/index/modules/FileSystemModuleToConfigDirectoryIndex.java (100%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/src/main/java/org/graalvm/reachability/internal/index/modules/JsonModuleToConfigDirectoryIndex.java (100%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/src/main/java/org/graalvm/reachability/internal/index/modules/ModuleEntry.java (100%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/src/main/java/org/graalvm/reachability/internal/index/modules/ModuleToConfigDirectoryIndex.java (100%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/src/main/java/org/graalvm/reachability/internal/index/modules/StandardLocationModuleToConfigDirectoryIndex.java (100%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/src/test/java/org/graalvm/reachability/internal/FileSystemRepositoryTest.java (100%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/src/test/java/org/graalvm/reachability/internal/index/artifacts/SingleModuleJsonVersionToConfigDirectoryIndexTest.java (100%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/src/test/java/org/graalvm/reachability/internal/index/modules/FileSystemModuleToConfigDirectoryIndexTest.java (100%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/src/test/java/org/graalvm/reachability/internal/index/modules/JsonModuleToConfigDirectoryIndexTest.java (100%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/src/test/java/org/graalvm/reachability/internal/index/modules/StandardLocationModuleToConfigDirectoryIndexTest.java (100%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/src/test/resources/json/artifact-1/index.json (100%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/src/test/resources/json/modules/multi-dirs/index.json (100%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/src/test/resources/json/modules/multi-dirs/io.netty/netty-core/placeholder.txt (100%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/src/test/resources/json/modules/multi-dirs/jline/placeholder.txt (100%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/src/test/resources/json/modules/multi-dirs/org/bar/placeholder.txt (100%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/src/test/resources/json/modules/single-dir/index.json (100%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/src/test/resources/json/modules/single-dir/io.netty/netty-core/placeholder.txt (100%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/src/test/resources/json/modules/single-dir/jline/placeholder.txt (100%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/src/test/resources/json/modules/single-dir/org/bar/placeholder.txt (100%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/src/test/resources/repos/repo1/index.json (100%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/src/test/resources/repos/repo1/org/foo/1.0/reflect-config.json (100%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/src/test/resources/repos/repo1/org/foo/1.1/reflect-config.json (100%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/src/test/resources/repos/repo1/org/foo/index.json (100%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/src/test/resources/repos/repo2/index.json (100%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/src/test/resources/repos/repo2/org/foo/1.0/reflect-config.json (100%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/src/test/resources/repos/repo2/org/foo/1.1/reflect-config.json (100%) rename common/{jvm-reachability-metadata => graalvm-reachability-metadata}/src/test/resources/repos/repo2/org/foo/index.json (100%) diff --git a/.github/workflows/test-graalvm-metadata.yml b/.github/workflows/test-graalvm-metadata.yml index 3b0afa41d..edb52c224 100644 --- a/.github/workflows/test-graalvm-metadata.yml +++ b/.github/workflows/test-graalvm-metadata.yml @@ -3,12 +3,12 @@ name: "Test GraalVM Reachability Metadata Repository" on: push: paths: - - 'common/jvm-reachability-metadata/**' + - 'common/graalvm-reachability-metadata/**' - '.github/actions/prepare-environment' - '.github/workflows/test-graalvm-metadata.yml' pull_request: paths: - - 'common/jvm-reachability-metadata/**' + - 'common/graalvm-reachability-metadata/**' - '.github/actions/prepare-environment' - '.github/workflows/test-graalvm-metadata.yml' workflow_dispatch: @@ -37,12 +37,12 @@ jobs: java-version: ${{ matrix.java-version }} github-token: ${{ secrets.GITHUB_TOKEN }} - name: "❓ Checkstyle" - run: ./gradlew :jvm-reachability-metadata:checkstyleMain :jvm-reachability-metadata:checkstyleTest + run: ./gradlew :graalvm-reachability-metadata:checkstyleMain :graalvm-reachability-metadata:checkstyleTest - name: "❓ GraalVM Reachability Metadata test" - run: ./gradlew :jvm-reachability-metadata:test + run: ./gradlew :graalvm-reachability-metadata:test - name: "📜 Upload tests results" if: always() uses: actions/upload-artifact@v2 with: name: tests-results - path: common/jvm-reachability-metadata/build/reports/tests/ + path: common/graalvm-reachability-metadata/build/reports/tests/ diff --git a/common/jvm-reachability-metadata/LICENSE b/common/graalvm-reachability-metadata/LICENSE similarity index 100% rename from common/jvm-reachability-metadata/LICENSE rename to common/graalvm-reachability-metadata/LICENSE diff --git a/common/jvm-reachability-metadata/build.gradle.kts b/common/graalvm-reachability-metadata/build.gradle.kts similarity index 100% rename from common/jvm-reachability-metadata/build.gradle.kts rename to common/graalvm-reachability-metadata/build.gradle.kts diff --git a/common/jvm-reachability-metadata/gradle/native-image-testing.gradle b/common/graalvm-reachability-metadata/gradle/native-image-testing.gradle similarity index 100% rename from common/jvm-reachability-metadata/gradle/native-image-testing.gradle rename to common/graalvm-reachability-metadata/gradle/native-image-testing.gradle diff --git a/common/jvm-reachability-metadata/gradle/wrapper/gradle-wrapper.jar b/common/graalvm-reachability-metadata/gradle/wrapper/gradle-wrapper.jar similarity index 100% rename from common/jvm-reachability-metadata/gradle/wrapper/gradle-wrapper.jar rename to common/graalvm-reachability-metadata/gradle/wrapper/gradle-wrapper.jar diff --git a/common/jvm-reachability-metadata/gradle/wrapper/gradle-wrapper.properties b/common/graalvm-reachability-metadata/gradle/wrapper/gradle-wrapper.properties similarity index 100% rename from common/jvm-reachability-metadata/gradle/wrapper/gradle-wrapper.properties rename to common/graalvm-reachability-metadata/gradle/wrapper/gradle-wrapper.properties diff --git a/common/jvm-reachability-metadata/gradlew b/common/graalvm-reachability-metadata/gradlew similarity index 100% rename from common/jvm-reachability-metadata/gradlew rename to common/graalvm-reachability-metadata/gradlew diff --git a/common/jvm-reachability-metadata/gradlew.bat b/common/graalvm-reachability-metadata/gradlew.bat similarity index 100% rename from common/jvm-reachability-metadata/gradlew.bat rename to common/graalvm-reachability-metadata/gradlew.bat diff --git a/common/jvm-reachability-metadata/settings.gradle.kts b/common/graalvm-reachability-metadata/settings.gradle.kts similarity index 97% rename from common/jvm-reachability-metadata/settings.gradle.kts rename to common/graalvm-reachability-metadata/settings.gradle.kts index 39c0f4fe5..19ce0fb57 100644 --- a/common/jvm-reachability-metadata/settings.gradle.kts +++ b/common/graalvm-reachability-metadata/settings.gradle.kts @@ -48,4 +48,4 @@ plugins { id("org.graalvm.build.common") } -rootProject.name = "jvm-reachability-metadata" +rootProject.name = "graalvm-reachability-metadata" diff --git a/common/jvm-reachability-metadata/src/main/java/org/graalvm/reachability/GraalVMReachabilityMetadataRepository.java b/common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/GraalVMReachabilityMetadataRepository.java similarity index 100% rename from common/jvm-reachability-metadata/src/main/java/org/graalvm/reachability/GraalVMReachabilityMetadataRepository.java rename to common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/GraalVMReachabilityMetadataRepository.java diff --git a/common/jvm-reachability-metadata/src/main/java/org/graalvm/reachability/Query.java b/common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/Query.java similarity index 100% rename from common/jvm-reachability-metadata/src/main/java/org/graalvm/reachability/Query.java rename to common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/Query.java diff --git a/common/jvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/DefaultArtifactQuery.java b/common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/DefaultArtifactQuery.java similarity index 100% rename from common/jvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/DefaultArtifactQuery.java rename to common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/DefaultArtifactQuery.java diff --git a/common/jvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/DefaultQuery.java b/common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/DefaultQuery.java similarity index 100% rename from common/jvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/DefaultQuery.java rename to common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/DefaultQuery.java diff --git a/common/jvm-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 similarity index 100% rename from common/jvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/FileSystemRepository.java rename to common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/FileSystemRepository.java diff --git a/common/jvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/UncheckedIOException.java b/common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/UncheckedIOException.java similarity index 100% rename from common/jvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/UncheckedIOException.java rename to common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/UncheckedIOException.java diff --git a/common/jvm-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 similarity index 100% rename from common/jvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/index/artifacts/Artifact.java rename to common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/index/artifacts/Artifact.java diff --git a/common/jvm-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 similarity index 100% rename from common/jvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/index/artifacts/SingleModuleJsonVersionToConfigDirectoryIndex.java rename to common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/index/artifacts/SingleModuleJsonVersionToConfigDirectoryIndex.java diff --git a/common/jvm-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 similarity index 100% rename from common/jvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/index/artifacts/VersionToConfigDirectoryIndex.java rename to common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/index/artifacts/VersionToConfigDirectoryIndex.java diff --git a/common/jvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/index/modules/FileSystemModuleToConfigDirectoryIndex.java b/common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/index/modules/FileSystemModuleToConfigDirectoryIndex.java similarity index 100% rename from common/jvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/index/modules/FileSystemModuleToConfigDirectoryIndex.java rename to common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/index/modules/FileSystemModuleToConfigDirectoryIndex.java diff --git a/common/jvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/index/modules/JsonModuleToConfigDirectoryIndex.java b/common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/index/modules/JsonModuleToConfigDirectoryIndex.java similarity index 100% rename from common/jvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/index/modules/JsonModuleToConfigDirectoryIndex.java rename to common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/index/modules/JsonModuleToConfigDirectoryIndex.java diff --git a/common/jvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/index/modules/ModuleEntry.java b/common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/index/modules/ModuleEntry.java similarity index 100% rename from common/jvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/index/modules/ModuleEntry.java rename to common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/index/modules/ModuleEntry.java diff --git a/common/jvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/index/modules/ModuleToConfigDirectoryIndex.java b/common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/index/modules/ModuleToConfigDirectoryIndex.java similarity index 100% rename from common/jvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/index/modules/ModuleToConfigDirectoryIndex.java rename to common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/index/modules/ModuleToConfigDirectoryIndex.java diff --git a/common/jvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/index/modules/StandardLocationModuleToConfigDirectoryIndex.java b/common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/index/modules/StandardLocationModuleToConfigDirectoryIndex.java similarity index 100% rename from common/jvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/index/modules/StandardLocationModuleToConfigDirectoryIndex.java rename to common/graalvm-reachability-metadata/src/main/java/org/graalvm/reachability/internal/index/modules/StandardLocationModuleToConfigDirectoryIndex.java diff --git a/common/jvm-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 similarity index 100% rename from common/jvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/FileSystemRepositoryTest.java rename to common/graalvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/FileSystemRepositoryTest.java diff --git a/common/jvm-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 similarity index 100% rename from common/jvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/index/artifacts/SingleModuleJsonVersionToConfigDirectoryIndexTest.java rename to common/graalvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/index/artifacts/SingleModuleJsonVersionToConfigDirectoryIndexTest.java diff --git a/common/jvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/index/modules/FileSystemModuleToConfigDirectoryIndexTest.java b/common/graalvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/index/modules/FileSystemModuleToConfigDirectoryIndexTest.java similarity index 100% rename from common/jvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/index/modules/FileSystemModuleToConfigDirectoryIndexTest.java rename to common/graalvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/index/modules/FileSystemModuleToConfigDirectoryIndexTest.java diff --git a/common/jvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/index/modules/JsonModuleToConfigDirectoryIndexTest.java b/common/graalvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/index/modules/JsonModuleToConfigDirectoryIndexTest.java similarity index 100% rename from common/jvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/index/modules/JsonModuleToConfigDirectoryIndexTest.java rename to common/graalvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/index/modules/JsonModuleToConfigDirectoryIndexTest.java diff --git a/common/jvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/index/modules/StandardLocationModuleToConfigDirectoryIndexTest.java b/common/graalvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/index/modules/StandardLocationModuleToConfigDirectoryIndexTest.java similarity index 100% rename from common/jvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/index/modules/StandardLocationModuleToConfigDirectoryIndexTest.java rename to common/graalvm-reachability-metadata/src/test/java/org/graalvm/reachability/internal/index/modules/StandardLocationModuleToConfigDirectoryIndexTest.java diff --git a/common/jvm-reachability-metadata/src/test/resources/json/artifact-1/index.json b/common/graalvm-reachability-metadata/src/test/resources/json/artifact-1/index.json similarity index 100% rename from common/jvm-reachability-metadata/src/test/resources/json/artifact-1/index.json rename to common/graalvm-reachability-metadata/src/test/resources/json/artifact-1/index.json diff --git a/common/jvm-reachability-metadata/src/test/resources/json/modules/multi-dirs/index.json b/common/graalvm-reachability-metadata/src/test/resources/json/modules/multi-dirs/index.json similarity index 100% rename from common/jvm-reachability-metadata/src/test/resources/json/modules/multi-dirs/index.json rename to common/graalvm-reachability-metadata/src/test/resources/json/modules/multi-dirs/index.json diff --git a/common/jvm-reachability-metadata/src/test/resources/json/modules/multi-dirs/io.netty/netty-core/placeholder.txt b/common/graalvm-reachability-metadata/src/test/resources/json/modules/multi-dirs/io.netty/netty-core/placeholder.txt similarity index 100% rename from common/jvm-reachability-metadata/src/test/resources/json/modules/multi-dirs/io.netty/netty-core/placeholder.txt rename to common/graalvm-reachability-metadata/src/test/resources/json/modules/multi-dirs/io.netty/netty-core/placeholder.txt diff --git a/common/jvm-reachability-metadata/src/test/resources/json/modules/multi-dirs/jline/placeholder.txt b/common/graalvm-reachability-metadata/src/test/resources/json/modules/multi-dirs/jline/placeholder.txt similarity index 100% rename from common/jvm-reachability-metadata/src/test/resources/json/modules/multi-dirs/jline/placeholder.txt rename to common/graalvm-reachability-metadata/src/test/resources/json/modules/multi-dirs/jline/placeholder.txt diff --git a/common/jvm-reachability-metadata/src/test/resources/json/modules/multi-dirs/org/bar/placeholder.txt b/common/graalvm-reachability-metadata/src/test/resources/json/modules/multi-dirs/org/bar/placeholder.txt similarity index 100% rename from common/jvm-reachability-metadata/src/test/resources/json/modules/multi-dirs/org/bar/placeholder.txt rename to common/graalvm-reachability-metadata/src/test/resources/json/modules/multi-dirs/org/bar/placeholder.txt diff --git a/common/jvm-reachability-metadata/src/test/resources/json/modules/single-dir/index.json b/common/graalvm-reachability-metadata/src/test/resources/json/modules/single-dir/index.json similarity index 100% rename from common/jvm-reachability-metadata/src/test/resources/json/modules/single-dir/index.json rename to common/graalvm-reachability-metadata/src/test/resources/json/modules/single-dir/index.json diff --git a/common/jvm-reachability-metadata/src/test/resources/json/modules/single-dir/io.netty/netty-core/placeholder.txt b/common/graalvm-reachability-metadata/src/test/resources/json/modules/single-dir/io.netty/netty-core/placeholder.txt similarity index 100% rename from common/jvm-reachability-metadata/src/test/resources/json/modules/single-dir/io.netty/netty-core/placeholder.txt rename to common/graalvm-reachability-metadata/src/test/resources/json/modules/single-dir/io.netty/netty-core/placeholder.txt diff --git a/common/jvm-reachability-metadata/src/test/resources/json/modules/single-dir/jline/placeholder.txt b/common/graalvm-reachability-metadata/src/test/resources/json/modules/single-dir/jline/placeholder.txt similarity index 100% rename from common/jvm-reachability-metadata/src/test/resources/json/modules/single-dir/jline/placeholder.txt rename to common/graalvm-reachability-metadata/src/test/resources/json/modules/single-dir/jline/placeholder.txt diff --git a/common/jvm-reachability-metadata/src/test/resources/json/modules/single-dir/org/bar/placeholder.txt b/common/graalvm-reachability-metadata/src/test/resources/json/modules/single-dir/org/bar/placeholder.txt similarity index 100% rename from common/jvm-reachability-metadata/src/test/resources/json/modules/single-dir/org/bar/placeholder.txt rename to common/graalvm-reachability-metadata/src/test/resources/json/modules/single-dir/org/bar/placeholder.txt diff --git a/common/jvm-reachability-metadata/src/test/resources/repos/repo1/index.json b/common/graalvm-reachability-metadata/src/test/resources/repos/repo1/index.json similarity index 100% rename from common/jvm-reachability-metadata/src/test/resources/repos/repo1/index.json rename to common/graalvm-reachability-metadata/src/test/resources/repos/repo1/index.json diff --git a/common/jvm-reachability-metadata/src/test/resources/repos/repo1/org/foo/1.0/reflect-config.json b/common/graalvm-reachability-metadata/src/test/resources/repos/repo1/org/foo/1.0/reflect-config.json similarity index 100% rename from common/jvm-reachability-metadata/src/test/resources/repos/repo1/org/foo/1.0/reflect-config.json rename to common/graalvm-reachability-metadata/src/test/resources/repos/repo1/org/foo/1.0/reflect-config.json diff --git a/common/jvm-reachability-metadata/src/test/resources/repos/repo1/org/foo/1.1/reflect-config.json b/common/graalvm-reachability-metadata/src/test/resources/repos/repo1/org/foo/1.1/reflect-config.json similarity index 100% rename from common/jvm-reachability-metadata/src/test/resources/repos/repo1/org/foo/1.1/reflect-config.json rename to common/graalvm-reachability-metadata/src/test/resources/repos/repo1/org/foo/1.1/reflect-config.json diff --git a/common/jvm-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 similarity index 100% rename from common/jvm-reachability-metadata/src/test/resources/repos/repo1/org/foo/index.json rename to common/graalvm-reachability-metadata/src/test/resources/repos/repo1/org/foo/index.json diff --git a/common/jvm-reachability-metadata/src/test/resources/repos/repo2/index.json b/common/graalvm-reachability-metadata/src/test/resources/repos/repo2/index.json similarity index 100% rename from common/jvm-reachability-metadata/src/test/resources/repos/repo2/index.json rename to common/graalvm-reachability-metadata/src/test/resources/repos/repo2/index.json diff --git a/common/jvm-reachability-metadata/src/test/resources/repos/repo2/org/foo/1.0/reflect-config.json b/common/graalvm-reachability-metadata/src/test/resources/repos/repo2/org/foo/1.0/reflect-config.json similarity index 100% rename from common/jvm-reachability-metadata/src/test/resources/repos/repo2/org/foo/1.0/reflect-config.json rename to common/graalvm-reachability-metadata/src/test/resources/repos/repo2/org/foo/1.0/reflect-config.json diff --git a/common/jvm-reachability-metadata/src/test/resources/repos/repo2/org/foo/1.1/reflect-config.json b/common/graalvm-reachability-metadata/src/test/resources/repos/repo2/org/foo/1.1/reflect-config.json similarity index 100% rename from common/jvm-reachability-metadata/src/test/resources/repos/repo2/org/foo/1.1/reflect-config.json rename to common/graalvm-reachability-metadata/src/test/resources/repos/repo2/org/foo/1.1/reflect-config.json diff --git a/common/jvm-reachability-metadata/src/test/resources/repos/repo2/org/foo/index.json b/common/graalvm-reachability-metadata/src/test/resources/repos/repo2/org/foo/index.json similarity index 100% rename from common/jvm-reachability-metadata/src/test/resources/repos/repo2/org/foo/index.json rename to common/graalvm-reachability-metadata/src/test/resources/repos/repo2/org/foo/index.json diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 24e4da915..c9b292219 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -24,7 +24,7 @@ nativeGradlePlugin = { module = "org.graalvm.buildtools:native-gradle-plugin", v nativeMavenPlugin = { module = "org.graalvm.buildtools:native-maven-plugin", version.ref = "nativeBuildTools" } junitPlatformNative = { module = "org.graalvm.buildtools:junit-platform-native", version.ref = "nativeBuildTools" } utils = { module = "org.graalvm.buildtools:utils", version.ref = "nativeBuildTools" } -jvmReachabilityMetadata = { module = "org.graalvm.buildtools:jvm-reachability-metadata", version.ref = "nativeBuildTools" } +jvmReachabilityMetadata = { module = "org.graalvm.buildtools:graalvm-reachability-metadata", version.ref = "nativeBuildTools" } # External dependencies test-junit-platform-console = { module = "org.junit.platform:junit-platform-console", version.ref = "junitPlatform" } diff --git a/native-maven-plugin/settings.gradle.kts b/native-maven-plugin/settings.gradle.kts index ca0381d31..3bf86a868 100644 --- a/native-maven-plugin/settings.gradle.kts +++ b/native-maven-plugin/settings.gradle.kts @@ -53,4 +53,4 @@ rootProject.name = "native-maven-plugin" includeBuild("../common/junit-platform-native") includeBuild("../common/utils") -includeBuild("../common/jvm-reachability-metadata") +includeBuild("../common/graalvm-reachability-metadata") diff --git a/settings.gradle.kts b/settings.gradle.kts index 4edd83d39..4e01a2d6e 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -48,7 +48,7 @@ rootProject.name = "native-build-tools" includeBuild("common/junit-platform-native") includeBuild("common/utils") -includeBuild("common/jvm-reachability-metadata") +includeBuild("common/graalvm-reachability-metadata") includeBuild("native-gradle-plugin") includeBuild("native-maven-plugin") includeBuild("docs") From 0be45ac581f57041c8862d4f87faaa5c8f9700b5 Mon Sep 17 00:00:00 2001 From: Vojin Jovanovic Date: Tue, 5 Jul 2022 14:14:08 +0200 Subject: [PATCH 15/27] First draft of changes --- .../buildtools/utils/SharedConstants.java | 2 +- docs/src/docs/asciidoc/gradle-plugin.adoc | 35 ++----------------- docs/src/docs/asciidoc/maven-plugin.adoc | 30 +++------------- .../docs/snippets/gradle/groovy/build.gradle | 2 +- .../snippets/gradle/kotlin/build.gradle.kts | 2 +- .../MetadataRepositoryFunctionalTest.groovy | 4 +-- .../native-config-integration/build.gradle | 4 --- samples/native-config-integration/pom.xml | 7 ++-- 8 files changed, 14 insertions(+), 72 deletions(-) diff --git a/common/utils/src/main/java/org/graalvm/buildtools/utils/SharedConstants.java b/common/utils/src/main/java/org/graalvm/buildtools/utils/SharedConstants.java index 11f3d1e48..c64d1ea05 100644 --- a/common/utils/src/main/java/org/graalvm/buildtools/utils/SharedConstants.java +++ b/common/utils/src/main/java/org/graalvm/buildtools/utils/SharedConstants.java @@ -75,5 +75,5 @@ public interface SharedConstants { String AGENT_SESSION_SUBDIR = "session-{pid}-{datetime}"; String AGENT_OUTPUT_DIRECTORY_MARKER = "{output_dir}"; String AGENT_OUTPUT_DIRECTORY_OPTION = "config-output-dir="; - String METADATA_REPO_URL_TEMPLATE = "https://github.com/graalvm/graalvm-reachability-metadata/releases/download/%1$s/graalvm-reachability-metadata-%1$s.zip"; + String METADATA_REPO_URL_TEMPLATE = "https://github.com/oracle/graalvm-reachability-metadata/releases/download/%1$s/graalvm-reachability-metadata-%1$s.zip"; } diff --git a/docs/src/docs/asciidoc/gradle-plugin.adoc b/docs/src/docs/asciidoc/gradle-plugin.adoc index cb22ce530..418393a93 100644 --- a/docs/src/docs/asciidoc/gradle-plugin.adoc +++ b/docs/src/docs/asciidoc/gradle-plugin.adoc @@ -228,37 +228,6 @@ Currently, this feature requires the execution of the tests in the classic "JVM" NOTE: This plugin requires JUnit Platform 1.8 or higher. -[[mockito-bytebuddy-support]] -=== Mockito / Byte Buddy support - -Mockito is supported starting from version 4.5.0 (ByteBuddy >= 1.12.9) with GraalVM >= 22.1. -However, you need to add the following configuration to make it work with GraalVM 22.1: - -.Enabling Mockito / Byte Buddy support on GraalVM 22.1 -[source,groovy,role="multi-language-sample"] ----- -graalvmNative { - binaries { - test { - buildArgs.add("--rerun-class-initialization-at-runtime=net.bytebuddy.ClassFileVersion,net.bytebuddy.utility.dispatcher.JavaDispatcher,net.bytebuddy.utility.Invoker$Dispatcher") - buildArgs.add("--initialize-at-build-time=net.bytebuddy.description.method.MethodDescription$InDefinedShape$AbstractBase$ForLoadedExecutable,net.bytebuddy.description.type.TypeDescription$AbstractBase,net.bytebuddy.description.type.TypeDescription$ForLoadedType,net.bytebuddy.description.method.MethodDescription$ForLoadedMethod,net.bytebuddy.implementation.bind.annotation.Argument$BindingMechanic,net.bytebuddy.implementation.bind.annotation.Argument$BindingMechanic$1,net.bytebuddy.implementation.bind.annotation.Argument$BindingMechanic$2,net.bytebuddy.implementation.bind.annotation.Super$Instantiation$2") - } - } -} ----- - -[source,kotlin,role="multi-language-sample"] ----- -graalvmNative { - binaries { - named("test") { - buildArgs.add("--rerun-class-initialization-at-runtime=net.bytebuddy.ClassFileVersion,net.bytebuddy.utility.dispatcher.JavaDispatcher,net.bytebuddy.utility.Invoker$Dispatcher") - buildArgs.add("--initialize-at-build-time=net.bytebuddy.description.method.MethodDescription$InDefinedShape$AbstractBase$ForLoadedExecutable,net.bytebuddy.description.type.TypeDescription$AbstractBase,net.bytebuddy.description.type.TypeDescription$ForLoadedType,net.bytebuddy.description.method.MethodDescription$ForLoadedMethod,net.bytebuddy.implementation.bind.annotation.Argument$BindingMechanic,net.bytebuddy.implementation.bind.annotation.Argument$BindingMechanic$1,net.bytebuddy.implementation.bind.annotation.Argument$BindingMechanic$2,net.bytebuddy.implementation.bind.annotation.Super$Instantiation$2") - } - } -} ----- - [[testing-support-disabling]] === Disabling testing support @@ -358,8 +327,8 @@ See <> for the full list of available options. [[metadata-support]] == GraalVM Reachability Metadata Support -Since release 0.9.11, the plugin adds experimental support for the https://github.com/graalvm/graalvm-reachability-metadata/[GraalVM reachability metadata repository]. -This repository provides GraalVM configuration for libraries which do not officially support GraalVM native. +Since release 0.9.11, the plugin adds experimental support for the https://github.com/oracle/graalvm-reachability-metadata/[GraalVM reachability metadata repository]. +This repository provides https://www.graalvm.org/22.2/reference-manual/native-image/ReachabilityMetadata/[reachability metadata] for libraries that do not support GraalVM Native Image. === Enabling the metadata repository diff --git a/docs/src/docs/asciidoc/maven-plugin.adoc b/docs/src/docs/asciidoc/maven-plugin.adoc index d433db118..e12a08b7a 100644 --- a/docs/src/docs/asciidoc/maven-plugin.adoc +++ b/docs/src/docs/asciidoc/maven-plugin.adoc @@ -349,23 +349,6 @@ with an error similar to the following when attempting to run tests in a native [ERROR] Test configuration file wasn't found. Make sure that test execution wasn't skipped. ---- -[[mockito-bytebuddy-support]] -=== Mockito / Byte Buddy support - -Mockito is supported starting from version 4.5.0 (ByteBuddy >= 1.12.9) with GraalVM >= 22.1. -However, you need to add the following configuration to make it work with GraalVM 22.1: - -.Enabling Mockito / Byte Buddy support on GraalVM 22.1 -[source,xml] ----- - - - --rerun-class-initialization-at-runtime=net.bytebuddy.ClassFileVersion,net.bytebuddy.utility.dispatcher.JavaDispatcher,net.bytebuddy.utility.Invoker$Dispatcher - --initialize-at-build-time=net.bytebuddy.description.method.MethodDescription$InDefinedShape$AbstractBase$ForLoadedExecutable,net.bytebuddy.description.type.TypeDescription$AbstractBase,net.bytebuddy.description.type.TypeDescription$ForLoadedType,net.bytebuddy.description.method.MethodDescription$ForLoadedMethod,net.bytebuddy.implementation.bind.annotation.Argument$BindingMechanic,net.bytebuddy.implementation.bind.annotation.Argument$BindingMechanic$1,net.bytebuddy.implementation.bind.annotation.Argument$BindingMechanic$2,net.bytebuddy.implementation.bind.annotation.Super$Instantiation$2 - - ----- - [[testing-support-disabling]] === Disabling testing support @@ -609,25 +592,20 @@ with those configuration files, you then need to execute the following command: mvn -Pnative -Dagent=true -DskipTests package exec:exec@native ``` -WARNING: If the agent is enabled, the `--allow-incomplete-classpath` option is -automatically added to your native build options. - [[metadata-support]] == GraalVM Reachability Metadata Support -Since release 0.9.12, the plugin adds experimental support for the https://github.com/graalvm/graalvm-reachability-metadata/[GraalVM reachability metadata repository]. -This repository provides GraalVM metadata for libraries which do not officially support GraalVM native. - -A metadata repository consists of configuration files for GraalVM. +Since release 0.9.12, the plugin adds experimental support for the https://github.com/oracle/graalvm-reachability-metadata/[GraalVM reachability metadata repository]. +This repository provides https://www.graalvm.org/22.2/reference-manual/native-image/ReachabilityMetadata/[reachability metadata] for libraries that do not support GraalVM Native Image. === Enabling the metadata repository -Support needs to be enabled explicitly:. It is possible to use a _local repository_, in which case you can specify the path to the repository: +Support needs to be enabled explicitly: .Enabling the metadata repository [source,xml,indent=0] ---- -include::../../../../samples/native-config-integration/pom.xml[tag=metadata-local] +include::../../../../samples/native-config-integration/pom.xml[tag=metadata-default] ---- <1> The local path can point to an _exploded_ directory, or to a compressed ZIP file. diff --git a/docs/src/docs/snippets/gradle/groovy/build.gradle b/docs/src/docs/snippets/gradle/groovy/build.gradle index 7f375d323..ff96c78c3 100644 --- a/docs/src/docs/snippets/gradle/groovy/build.gradle +++ b/docs/src/docs/snippets/gradle/groovy/build.gradle @@ -176,7 +176,7 @@ graalvmNative { // tag::specify-metadata-repository-version[] graalvmNative { metadataRepository { - version = "1.0.0" + version = "0.1.0" } } // end::specify-metadata-repository-version[] diff --git a/docs/src/docs/snippets/gradle/kotlin/build.gradle.kts b/docs/src/docs/snippets/gradle/kotlin/build.gradle.kts index a19cf5ba2..e30f416a1 100644 --- a/docs/src/docs/snippets/gradle/kotlin/build.gradle.kts +++ b/docs/src/docs/snippets/gradle/kotlin/build.gradle.kts @@ -189,7 +189,7 @@ graalvmNative { // tag::specify-metadata-repository-version[] graalvmNative { metadataRepository { - version.set("1.0.0") + version.set("0.1.0") } } // end::specify-metadata-repository-version[] diff --git a/native-maven-plugin/src/functionalTest/groovy/org/graalvm/buildtools/maven/MetadataRepositoryFunctionalTest.groovy b/native-maven-plugin/src/functionalTest/groovy/org/graalvm/buildtools/maven/MetadataRepositoryFunctionalTest.groovy index 5d5483278..2f0c983aa 100644 --- a/native-maven-plugin/src/functionalTest/groovy/org/graalvm/buildtools/maven/MetadataRepositoryFunctionalTest.groovy +++ b/native-maven-plugin/src/functionalTest/groovy/org/graalvm/buildtools/maven/MetadataRepositoryFunctionalTest.groovy @@ -73,7 +73,7 @@ class MetadataRepositoryFunctionalTest extends AbstractGraalVMMavenFunctionalTes withSample("native-config-integration") when: - mvn '-Pnative,metadataLocal', '-DskipTests', 'package', 'exec:exec@native' + mvn '-Pnative,metadataDefault', '-DskipTests', 'package', 'exec:exec@native' then: buildSucceeded @@ -91,7 +91,7 @@ class MetadataRepositoryFunctionalTest extends AbstractGraalVMMavenFunctionalTes withSample("native-config-integration") when: - mvn '-Pnative,metadataLocal,excludeConfigTest', '-DnativeDryRun', 'package' + mvn '-Pnative,metadataDefault,excludeConfigTest', '-DnativeDryRun', 'package' then: buildSucceeded diff --git a/samples/native-config-integration/build.gradle b/samples/native-config-integration/build.gradle index dc38d47af..8919cad54 100644 --- a/samples/native-config-integration/build.gradle +++ b/samples/native-config-integration/build.gradle @@ -70,10 +70,6 @@ tasks.withType(Test).configureEach { graalvmNative { metadataRepository { enabled = true - def extension = System.getProperty("extension", '') - def repo = file("config-directory${extension ? '.' + extension : ''}") - println("Using config repo: $repo") - uri(repo) } binaries.all { verbose = true diff --git a/samples/native-config-integration/pom.xml b/samples/native-config-integration/pom.xml index 959cf5113..be9acdd40 100644 --- a/samples/native-config-integration/pom.xml +++ b/samples/native-config-integration/pom.xml @@ -148,10 +148,10 @@ - metadataLocal + metadataDefault - + org.graalvm.buildtools native-maven-plugin @@ -159,11 +159,10 @@ true - ${project.basedir}/config-directory - + From fccfb8f7cbe2b2ec5c200a12cc6a6a482ab0f3ad Mon Sep 17 00:00:00 2001 From: Aleksandar Gradinac Date: Tue, 5 Jul 2022 18:20:22 +0200 Subject: [PATCH 16/27] Introduce a default metadata repo version --- .../java/org/graalvm/buildtools/utils/SharedConstants.java | 1 + .../java/org/graalvm/buildtools/gradle/NativeImagePlugin.java | 1 + .../maven/config/MetadataRepositoryConfiguration.java | 3 ++- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/common/utils/src/main/java/org/graalvm/buildtools/utils/SharedConstants.java b/common/utils/src/main/java/org/graalvm/buildtools/utils/SharedConstants.java index c64d1ea05..6498e8d60 100644 --- a/common/utils/src/main/java/org/graalvm/buildtools/utils/SharedConstants.java +++ b/common/utils/src/main/java/org/graalvm/buildtools/utils/SharedConstants.java @@ -76,4 +76,5 @@ public interface SharedConstants { String AGENT_OUTPUT_DIRECTORY_MARKER = "{output_dir}"; String AGENT_OUTPUT_DIRECTORY_OPTION = "config-output-dir="; String METADATA_REPO_URL_TEMPLATE = "https://github.com/oracle/graalvm-reachability-metadata/releases/download/%1$s/graalvm-reachability-metadata-%1$s.zip"; + String METADATA_REPO_DEFAULT_VERSION = "0.1.0"; } 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 23a96dc06..70b887e25 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 @@ -423,6 +423,7 @@ private GraalVMExtension registerGraalVMExtension(Project project) { private void configureNativeConfigurationRepo(ExtensionAware graalvmNative) { GraalVMReachabilityMetadataRepositoryExtension configurationRepository = graalvmNative.getExtensions().create("metadataRepository", GraalVMReachabilityMetadataRepositoryExtension.class); configurationRepository.getEnabled().convention(false); + configurationRepository.getVersion().convention(SharedConstants.METADATA_REPO_DEFAULT_VERSION); configurationRepository.getUri().convention(configurationRepository.getVersion().map(v -> { try { return new URI(String.format(METADATA_REPO_URL_TEMPLATE, v)); diff --git a/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/config/MetadataRepositoryConfiguration.java b/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/config/MetadataRepositoryConfiguration.java index d63610721..6dd1b65d2 100644 --- a/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/config/MetadataRepositoryConfiguration.java +++ b/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/config/MetadataRepositoryConfiguration.java @@ -44,6 +44,7 @@ import org.apache.maven.artifact.Artifact; import org.apache.maven.model.Dependency; import org.apache.maven.plugins.annotations.Parameter; +import org.graalvm.buildtools.utils.SharedConstants; import java.io.File; import java.net.URL; @@ -56,7 +57,7 @@ public class MetadataRepositoryConfiguration { @Parameter(defaultValue = "false") private boolean enabled; - @Parameter + @Parameter(defaultValue = SharedConstants.METADATA_REPO_DEFAULT_VERSION) private String version; @Parameter From d522ce77723f8523ff3109326c9ff05019976db5 Mon Sep 17 00:00:00 2001 From: Aleksandar Gradinac Date: Wed, 6 Jul 2022 02:16:15 +0200 Subject: [PATCH 17/27] Fix extraction of remote metadata repositories --- .../internal/FileSystemRepository.java | 15 +++++++++++++-- .../GraalVMReachabilityMetadataService.java | 18 ++++++++++++++++-- 2 files changed, 29 insertions(+), 4 deletions(-) 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 e74b436d5..76dc0e26f 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 @@ -73,9 +73,20 @@ public FileSystemRepository(Path rootDirectory, Logger logger) { this.rootDirectory = rootDirectory; } - public static boolean isSupportedArchiveFormat(String path) { + private static final String[] SUPPORTED_FORMATS = {".zip", ".tar.gz", ".tar.bz2"}; + + public static String getArchiveFormat(String path) { String normalizedPath = path.toLowerCase(); - return normalizedPath.endsWith(".zip") || normalizedPath.endsWith(".tar.gz") || normalizedPath.endsWith(".tar.bz2"); + for (String format : SUPPORTED_FORMATS) { + if (normalizedPath.endsWith(format)) { + return format; + } + } + return null; + } + + public static boolean isSupportedArchiveFormat(String path) { + return getArchiveFormat(path) != null; } @Override 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 f2335e2d4..dc4e8c355 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 @@ -122,9 +122,23 @@ private GraalVMReachabilityMetadataRepository newRepository(URI uri) throws URIS } return newRepositoryFromDirectory(localFile.toPath(), logLevel); } - if (FileSystemRepository.isSupportedArchiveFormat(path)) { - File zipped = getParameters().getCacheDir().file(cacheKey + "/archive").get().getAsFile(); + String format = FileSystemRepository.getArchiveFormat(path); + if (format != null) { + File zipped = getParameters().getCacheDir().file(cacheKey + "/archive" + format).get().getAsFile(); if (!zipped.exists()) { + File cacheDirParent = zipped.getParentFile(); + if (cacheDirParent.exists()) { + if (!cacheDirParent.isDirectory()) { + throw new RuntimeException("Cache directory path must not exist or must be a directory: " + cacheDirParent.getAbsolutePath()); + } + } else { + try { + Files.createDirectories(cacheDirParent.toPath()); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + try (ReadableByteChannel readableByteChannel = Channels.newChannel(uri.toURL().openStream())) { try (FileOutputStream fileOutputStream = new FileOutputStream(zipped)) { fileOutputStream.getChannel().transferFrom(readableByteChannel, 0, Long.MAX_VALUE); From 0e41e1976da7c5a5e102913e5c4ee4fe4a3bd37c Mon Sep 17 00:00:00 2001 From: Aleksandar Gradinac Date: Wed, 6 Jul 2022 02:42:07 +0200 Subject: [PATCH 18/27] Add a remote metadata repository sample --- .../RemoteMetadataRepoFunctionalTest.groovy | 66 +++++++++++++++ samples/metadata-repo-integration/.gitignore | 1 + .../metadata-repo-integration/build.gradle | 68 +++++++++++++++ .../gradle.properties | 2 + .../metadata-repo-integration/settings.gradle | 11 +++ .../java/org/graalvm/example/H2Example.java | 82 +++++++++++++++++++ 6 files changed, 230 insertions(+) create mode 100644 native-gradle-plugin/src/functionalTest/groovy/org/graalvm/buildtools/gradle/RemoteMetadataRepoFunctionalTest.groovy create mode 100644 samples/metadata-repo-integration/.gitignore create mode 100644 samples/metadata-repo-integration/build.gradle create mode 100644 samples/metadata-repo-integration/gradle.properties create mode 100644 samples/metadata-repo-integration/settings.gradle create mode 100644 samples/metadata-repo-integration/src/main/java/org/graalvm/example/H2Example.java diff --git a/native-gradle-plugin/src/functionalTest/groovy/org/graalvm/buildtools/gradle/RemoteMetadataRepoFunctionalTest.groovy b/native-gradle-plugin/src/functionalTest/groovy/org/graalvm/buildtools/gradle/RemoteMetadataRepoFunctionalTest.groovy new file mode 100644 index 000000000..8ad86e3d6 --- /dev/null +++ b/native-gradle-plugin/src/functionalTest/groovy/org/graalvm/buildtools/gradle/RemoteMetadataRepoFunctionalTest.groovy @@ -0,0 +1,66 @@ +/* + * Copyright (c) 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.buildtools.gradle + +import org.graalvm.buildtools.gradle.fixtures.AbstractFunctionalTest +import org.gradle.api.logging.LogLevel +import spock.lang.Unroll + +class RemoteMetadataRepoFunctionalTest extends AbstractFunctionalTest { + + def "can build and run a native-image using metadata from the remote repository"() { + given: + withSample("metadata-repo-integration") + + when: + run 'nativeRun', "-D${NativeImagePlugin.CONFIG_REPO_LOGLEVEL}=${LogLevel.LIFECYCLE}" + + then: + tasks { + succeeded ':jar', ':nativeCompile', ':nativeRun' + } + + and: "finds metadata in the remote repository" + outputContains "[graalvm reachability metadata repository for com.h2database:h2:2.1.210]: Configuration directory is com.h2database/h2/2.1.210" + } + +} diff --git a/samples/metadata-repo-integration/.gitignore b/samples/metadata-repo-integration/.gitignore new file mode 100644 index 000000000..249cda967 --- /dev/null +++ b/samples/metadata-repo-integration/.gitignore @@ -0,0 +1 @@ +/data \ No newline at end of file diff --git a/samples/metadata-repo-integration/build.gradle b/samples/metadata-repo-integration/build.gradle new file mode 100644 index 000000000..426b1aae6 --- /dev/null +++ b/samples/metadata-repo-integration/build.gradle @@ -0,0 +1,68 @@ +/* + * Copyright (c) 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. + */ +plugins { + id 'application' + id 'org.graalvm.buildtools.native' +} + +repositories { + mavenCentral() +} + +application { + mainClass.set('org.graalvm.example.H2Example') +} + +String h2_version = getProperty("h2.version") + + +dependencies { + implementation("com.h2database:h2:$h2_version") +} + +graalvmNative { + agent { + defaultMode = "standard" + } + metadataRepository { + enabled = true + } +} diff --git a/samples/metadata-repo-integration/gradle.properties b/samples/metadata-repo-integration/gradle.properties new file mode 100644 index 000000000..b59b5f944 --- /dev/null +++ b/samples/metadata-repo-integration/gradle.properties @@ -0,0 +1,2 @@ +native.gradle.plugin.version = 0.9.13-SNAPSHOT +h2.version = 2.1.210 diff --git a/samples/metadata-repo-integration/settings.gradle b/samples/metadata-repo-integration/settings.gradle new file mode 100644 index 000000000..5a909b526 --- /dev/null +++ b/samples/metadata-repo-integration/settings.gradle @@ -0,0 +1,11 @@ +pluginManagement { + plugins { + id 'org.graalvm.buildtools.native' version getProperty('native.gradle.plugin.version') + } + repositories { + mavenCentral() + gradlePluginPortal() + } +} + +rootProject.name = 'h2-demo' diff --git a/samples/metadata-repo-integration/src/main/java/org/graalvm/example/H2Example.java b/samples/metadata-repo-integration/src/main/java/org/graalvm/example/H2Example.java new file mode 100644 index 000000000..644981822 --- /dev/null +++ b/samples/metadata-repo-integration/src/main/java/org/graalvm/example/H2Example.java @@ -0,0 +1,82 @@ +package org.graalvm.example; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +/** + * @author Moritz Halbritter + */ +public class H2Example { + + public static final String JDBC_CONNECTION_URL = "jdbc:h2:./data/test"; + + public static void main(String[] args) throws Exception { + // Cleanup + withConnection(JDBC_CONNECTION_URL, connection -> { + connection.prepareStatement("DROP TABLE IF EXISTS customers").execute(); + connection.commit(); + }); + + Set customers = Set.of("Lord Archimonde", "Arthur", "Gilbert", "Grug"); + + System.out.println("=== Inserting the following customers in the database: "); + printCustomers(customers); + + // Insert data + withConnection(JDBC_CONNECTION_URL, connection -> { + connection.prepareStatement("CREATE TABLE customers(id INTEGER AUTO_INCREMENT, name VARCHAR)").execute(); + PreparedStatement statement = connection.prepareStatement("INSERT INTO customers(name) VALUES (?)"); + for (String customer : customers) { + statement.setString(1, customer); + statement.executeUpdate(); + } + connection.commit(); + }); + + System.out.println(""); + System.out.println("=== Reading customers from the database."); + System.out.println(""); + + Set savedCustomers = new HashSet<>(); + // Read data + withConnection(JDBC_CONNECTION_URL, connection -> { + try (ResultSet resultSet = connection.prepareStatement("SELECT * FROM customers").executeQuery()) { + while (resultSet.next()) { + savedCustomers.add(resultSet.getObject(2, String.class)); + } + } + }); + + System.out.println("=== Customers in the database: "); + printCustomers(savedCustomers); + } + + private static void printCustomers(Set customers) { + List customerList = new ArrayList<>(customers); + customerList.sort(Comparator.naturalOrder()); + int i = 0; + for (String customer : customerList) { + System.out.println((i + 1) + ". " + customer); + i++; + } + } + + private static void withConnection(String url, ConnectionCallback callback) throws SQLException { + try (Connection connection = DriverManager.getConnection(url)) { + connection.setAutoCommit(false); + callback.run(connection); + } + } + + private interface ConnectionCallback { + void run(Connection connection) throws SQLException; + } +} From ac966eb7c7d700c8f14a961f3f15c8722230325c Mon Sep 17 00:00:00 2001 From: Aleksandar Gradinac Date: Wed, 6 Jul 2022 03:30:49 +0200 Subject: [PATCH 19/27] Maven: use the default metadata repository URL and version if none is set --- .../buildtools/maven/AbstractNativeMojo.java | 24 ++++++++++++------- .../MetadataRepositoryConfiguration.java | 2 +- 2 files changed, 16 insertions(+), 10 deletions(-) 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 1d35589a5..88e8a0571 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 @@ -446,18 +446,24 @@ protected boolean isMetadataRepositoryEnabled() { protected void configureMetadataRepository() { if (isMetadataRepositoryEnabled()) { Path repoPath = null; - if (metadataRepositoryConfiguration.getVersion() != null && metadataRepositoryConfiguration.getUrl() == null) { - String metadataUrl = String.format(METADATA_REPO_URL_TEMPLATE, metadataRepositoryConfiguration.getVersion()); - try { - metadataRepositoryConfiguration.setUrl(new URI(metadataUrl).toURL()); - } catch (URISyntaxException | MalformedURLException e) { - throw new RuntimeException(e); - } - } if (metadataRepositoryConfiguration.getLocalPath() != null) { Path localPath = metadataRepositoryConfiguration.getLocalPath().toPath(); repoPath = unzipLocalMetadata(localPath); - } else if (metadataRepositoryConfiguration.getUrl() != null) { + } else { + URL targetUrl = metadataRepositoryConfiguration.getUrl(); + if (targetUrl == null) { + String version = metadataRepositoryConfiguration.getVersion(); + if (version == null) { + version = SharedConstants.METADATA_REPO_DEFAULT_VERSION; + } + String metadataUrl = String.format(METADATA_REPO_URL_TEMPLATE, version); + try { + targetUrl = new URI(metadataUrl).toURL(); + metadataRepositoryConfiguration.setUrl(targetUrl); + } catch (URISyntaxException | MalformedURLException e) { + throw new RuntimeException(e); + } + } Optional download = downloadMetadata(metadataRepositoryConfiguration.getUrl()); if (download.isPresent()) { logger.info("Downloaded GraalVM reachability metadata repository from " + metadataRepositoryConfiguration.getUrl()); diff --git a/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/config/MetadataRepositoryConfiguration.java b/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/config/MetadataRepositoryConfiguration.java index 6dd1b65d2..18f8e0791 100644 --- a/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/config/MetadataRepositoryConfiguration.java +++ b/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/config/MetadataRepositoryConfiguration.java @@ -57,7 +57,7 @@ public class MetadataRepositoryConfiguration { @Parameter(defaultValue = "false") private boolean enabled; - @Parameter(defaultValue = SharedConstants.METADATA_REPO_DEFAULT_VERSION) + @Parameter private String version; @Parameter From cafbc13a39adf8e590fa5d45fb287361cfedae93 Mon Sep 17 00:00:00 2001 From: Aleksandar Gradinac Date: Wed, 6 Jul 2022 03:57:42 +0200 Subject: [PATCH 20/27] Maven: Add reachability metadata repository caching --- .../graalvm/buildtools/utils/FileUtils.java | 20 ++++++++++ .../GraalVMReachabilityMetadataService.java | 22 +---------- .../buildtools/maven/AbstractNativeMojo.java | 37 ++++++++++++++----- 3 files changed, 50 insertions(+), 29 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 cd731213a..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 @@ -42,11 +42,16 @@ package org.graalvm.buildtools.utils; import java.io.IOException; +import java.math.BigInteger; import java.net.HttpURLConnection; +import java.net.URI; import java.net.URL; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardCopyOption; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; import java.util.Optional; import java.util.function.Consumer; import java.util.zip.ZipEntry; @@ -140,4 +145,19 @@ private static Optional sanitizePath(ZipEntry entry, Path destination) { return Optional.empty(); } } + + public static String hashFor(URI uri) { + try { + MessageDigest md = MessageDigest.getInstance("SHA-1"); + byte[] messageDigest = md.digest(md.digest(uri.toString().getBytes(StandardCharsets.UTF_8))); + BigInteger no = new BigInteger(1, messageDigest); + StringBuilder digest = new StringBuilder(no.toString(16)); + while (digest.length() < 32) { + digest.insert(0, "0"); + } + return digest.toString(); + } catch (NoSuchAlgorithmException e) { + throw new UnsupportedOperationException(e); + } + } } 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 dc4e8c355..d348f0b31 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 @@ -40,6 +40,7 @@ */ package org.graalvm.buildtools.gradle.internal; +import org.graalvm.buildtools.utils.FileUtils; import org.graalvm.reachability.GraalVMReachabilityMetadataRepository; import org.graalvm.reachability.Query; import org.graalvm.reachability.internal.FileSystemRepository; @@ -57,16 +58,12 @@ import java.io.File; import java.io.FileOutputStream; import java.io.IOException; -import java.math.BigInteger; import java.net.URI; import java.net.URISyntaxException; import java.nio.channels.Channels; import java.nio.channels.ReadableByteChannel; -import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; import java.util.Collection; import java.util.Set; import java.util.function.Consumer; @@ -96,23 +93,8 @@ public GraalVMReachabilityMetadataService() throws URISyntaxException { this.repository = newRepository(uri); } - private static String hashFor(URI uri) { - try { - MessageDigest md = MessageDigest.getInstance("SHA-1"); - byte[] messageDigest = md.digest(md.digest(uri.toString().getBytes(StandardCharsets.UTF_8))); - BigInteger no = new BigInteger(1, messageDigest); - StringBuilder digest = new StringBuilder(no.toString(16)); - while (digest.length() < 32) { - digest.insert(0, "0"); - } - return digest.toString(); - } catch (NoSuchAlgorithmException e) { - throw new UnsupportedOperationException(e); - } - } - private GraalVMReachabilityMetadataRepository newRepository(URI uri) throws URISyntaxException { - String cacheKey = hashFor(uri); + String cacheKey = FileUtils.hashFor(uri); String path = uri.getPath(); LogLevel logLevel = getParameters().getLogLevel().get(); if (uri.getScheme().equals("file")) { 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 88e8a0571..b8cc93b9b 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 @@ -446,9 +446,20 @@ protected boolean isMetadataRepositoryEnabled() { protected void configureMetadataRepository() { if (isMetadataRepositoryEnabled()) { Path repoPath = null; + Path destinationRoot = outputDirectory.toPath().resolve("graalvm-reachability-metadata"); + if (Files.exists(destinationRoot) && !Files.isDirectory(destinationRoot)) { + throw new RuntimeException("Metadata repository must be a directory, please remove regular file at: " + destinationRoot); + } + try { + Files.createDirectories(destinationRoot); + } catch (IOException e) { + throw new RuntimeException(e); + } + if (metadataRepositoryConfiguration.getLocalPath() != null) { Path localPath = metadataRepositoryConfiguration.getLocalPath().toPath(); - repoPath = unzipLocalMetadata(localPath); + Path destination = outputDirectory.toPath().resolve(FileUtils.hashFor(localPath.toUri())); + repoPath = unzipLocalMetadata(localPath, destination); } else { URL targetUrl = metadataRepositoryConfiguration.getUrl(); if (targetUrl == null) { @@ -464,10 +475,20 @@ protected void configureMetadataRepository() { throw new RuntimeException(e); } } - Optional download = downloadMetadata(metadataRepositoryConfiguration.getUrl()); - if (download.isPresent()) { - logger.info("Downloaded GraalVM reachability metadata repository from " + metadataRepositoryConfiguration.getUrl()); - repoPath = unzipLocalMetadata(download.get()); + Path destination; + try { + destination = destinationRoot.resolve(FileUtils.hashFor(targetUrl.toURI())); + } catch (URISyntaxException e) { + throw new RuntimeException(e); + } + if (Files.exists(destination)) { + repoPath = destination; + } else { + Optional download = downloadMetadata(targetUrl, destination); + if (download.isPresent()) { + logger.info("Downloaded GraalVM reachability metadata repository from " + targetUrl); + repoPath = unzipLocalMetadata(download.get(), destination); + } } } @@ -528,15 +549,13 @@ protected Optional getMetadataVersion(Artifact dependency) { } } - protected Optional downloadMetadata(URL url) { - Path destination = outputDirectory.toPath().resolve("graalvm-reachability-metadata"); + protected Optional downloadMetadata(URL url, Path destination) { return FileUtils.download(url, destination, logger::error); } - protected Path unzipLocalMetadata(Path localPath) { + protected Path unzipLocalMetadata(Path localPath, Path destination) { if (Files.exists(localPath)) { if (FileUtils.isZip(localPath)) { - Path destination = outputDirectory.toPath().resolve("graalvm-reachability-metadata"); if (!Files.exists(destination) && !destination.toFile().mkdirs()) { throw new RuntimeException("Failed creating destination directory"); } From ac7ad4124ca55bc23210e43eb44034bd024d5014 Mon Sep 17 00:00:00 2001 From: Aleksandar Gradinac Date: Wed, 6 Jul 2022 04:15:32 +0200 Subject: [PATCH 21/27] Build and run the metadata integration sample with Maven --- ...OfficialMetadataRepoFunctionalTest.groovy} | 4 +- ...ialMetadataRepositoryFunctionalTest.groovy | 61 +++++++ samples/metadata-repo-integration/pom.xml | 164 ++++++++++++++++++ 3 files changed, 227 insertions(+), 2 deletions(-) rename native-gradle-plugin/src/functionalTest/groovy/org/graalvm/buildtools/gradle/{RemoteMetadataRepoFunctionalTest.groovy => OfficialMetadataRepoFunctionalTest.groovy} (94%) create mode 100644 native-maven-plugin/src/functionalTest/groovy/org/graalvm/buildtools/maven/OfficialMetadataRepositoryFunctionalTest.groovy create mode 100644 samples/metadata-repo-integration/pom.xml diff --git a/native-gradle-plugin/src/functionalTest/groovy/org/graalvm/buildtools/gradle/RemoteMetadataRepoFunctionalTest.groovy b/native-gradle-plugin/src/functionalTest/groovy/org/graalvm/buildtools/gradle/OfficialMetadataRepoFunctionalTest.groovy similarity index 94% rename from native-gradle-plugin/src/functionalTest/groovy/org/graalvm/buildtools/gradle/RemoteMetadataRepoFunctionalTest.groovy rename to native-gradle-plugin/src/functionalTest/groovy/org/graalvm/buildtools/gradle/OfficialMetadataRepoFunctionalTest.groovy index 8ad86e3d6..2d4c3ae2a 100644 --- a/native-gradle-plugin/src/functionalTest/groovy/org/graalvm/buildtools/gradle/RemoteMetadataRepoFunctionalTest.groovy +++ b/native-gradle-plugin/src/functionalTest/groovy/org/graalvm/buildtools/gradle/OfficialMetadataRepoFunctionalTest.groovy @@ -45,9 +45,9 @@ import org.graalvm.buildtools.gradle.fixtures.AbstractFunctionalTest import org.gradle.api.logging.LogLevel import spock.lang.Unroll -class RemoteMetadataRepoFunctionalTest extends AbstractFunctionalTest { +class OfficialMetadataRepoFunctionalTest extends AbstractFunctionalTest { - def "can build and run a native-image using metadata from the remote repository"() { + def "the application runs when using the official metadata repository"() { given: withSample("metadata-repo-integration") diff --git a/native-maven-plugin/src/functionalTest/groovy/org/graalvm/buildtools/maven/OfficialMetadataRepositoryFunctionalTest.groovy b/native-maven-plugin/src/functionalTest/groovy/org/graalvm/buildtools/maven/OfficialMetadataRepositoryFunctionalTest.groovy new file mode 100644 index 000000000..10d152d9b --- /dev/null +++ b/native-maven-plugin/src/functionalTest/groovy/org/graalvm/buildtools/maven/OfficialMetadataRepositoryFunctionalTest.groovy @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2020, 2021, 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.buildtools.maven + +class OfficialMetadataRepositoryFunctionalTest extends AbstractGraalVMMavenFunctionalTest { + void "the application runs when using the official metadata repository"() { + given: + withSample("metadata-repo-integration") + + when: + mvn '-Pnative', '-DskipTests', 'package', 'exec:exec@native' + + then: + buildSucceeded + + and: "the run succeeded and retrieved data from the database" + outputContains "Customers in the database" + + and: "finds metadata in the remote repository" + outputContains "[graalvm reachability metadata repository for com.h2database:h2:2.1.210]: Configuration directory is com.h2database/h2/2.1.210" + } +} diff --git a/samples/metadata-repo-integration/pom.xml b/samples/metadata-repo-integration/pom.xml new file mode 100644 index 000000000..e5af99bd0 --- /dev/null +++ b/samples/metadata-repo-integration/pom.xml @@ -0,0 +1,164 @@ + + + + + 4.0.0 + + org.graalvm.buildtools.examples + maven + 1.0.0-SNAPSHOT + + + 1.8 + UTF-8 + 0.9.13-SNAPSHOT + 0.9.13-SNAPSHOT + 2.1.210 + h2-demo + org.graalvm.example.H2Example + + + + + com.h2database + h2 + ${h2.version} + + + + + + native + + + + org.graalvm.buildtools + native-maven-plugin + ${native.maven.plugin.version} + true + + + build-native + + build + + package + + + + false + ${imageName} + false + + true + + + + + + + + + + ${project.artifactId} + + + org.apache.maven.plugins + maven-surefire-plugin + 3.0.0-M5 + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + ${java.version} + 1.8 + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.2.2 + + + + true + ${mainClass} + + + + + + + org.codehaus.mojo + exec-maven-plugin + 3.0.0 + + + java + + java + + + ${mainClass} + + + + native + + exec + + + ${project.build.directory}/${imageName} + ${project.build.directory} + + + + + + + + From 427ab9d892be8e23e24a4c807f31b1b6956ccac3 Mon Sep 17 00:00:00 2001 From: Aleksandar Gradinac Date: Wed, 6 Jul 2022 05:07:43 +0200 Subject: [PATCH 22/27] Fix checkstyle errors --- .../buildtools/utils/FileUtilsTest.java | 48 ++++++++++++++++++- .../MetadataRepositoryConfiguration.java | 1 - 2 files changed, 46 insertions(+), 3 deletions(-) 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 3cb76d5d9..0af07030f 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 @@ -1,3 +1,43 @@ +/* + * Copyright (c) 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.buildtools.utils; import org.junit.jupiter.api.DisplayName; @@ -17,7 +57,9 @@ import java.util.Optional; import java.util.stream.Stream; -import static org.junit.jupiter.api.Assertions.*; +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 FileUtilsTest { @@ -97,8 +139,10 @@ void testExtract(@TempDir Path tempDir) throws IOException { assertTrue(Files.isDirectory(tempDir.resolve("org.graalvm.internal/library-with-reflection/1"))); assertTrue(Files.exists(tempDir.resolve("org.graalvm.internal/library-with-reflection/1/reflect-config.json"))); - assertEquals("[ { \"name\": \"org.graalvm.internal.reflect.Message\", \"allDeclaredFields\": true, \"allDeclaredMethods\": true }]", String.join("", Files.readAllLines(tempDir.resolve("org.graalvm.internal/library-with-reflection/1/reflect-config.json")))); + assertEquals("[ { \"name\": \"org.graalvm.internal.reflect.Message\", \"allDeclaredFields\": true, \"allDeclaredMethods\": true }]", + String.join("", Files.readAllLines(tempDir.resolve("org.graalvm.internal/library-with-reflection/1/reflect-config.json")))); } + @Test @DisplayName("It is protected against ZIP slip attacks") void testZipSlip(@TempDir Path tempDir) throws IOException { diff --git a/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/config/MetadataRepositoryConfiguration.java b/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/config/MetadataRepositoryConfiguration.java index 18f8e0791..d63610721 100644 --- a/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/config/MetadataRepositoryConfiguration.java +++ b/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/config/MetadataRepositoryConfiguration.java @@ -44,7 +44,6 @@ import org.apache.maven.artifact.Artifact; import org.apache.maven.model.Dependency; import org.apache.maven.plugins.annotations.Parameter; -import org.graalvm.buildtools.utils.SharedConstants; import java.io.File; import java.net.URL; From 744d0acd50e311fcf7e238943b64f33b2b312d66 Mon Sep 17 00:00:00 2001 From: Aleksandar Gradinac Date: Wed, 6 Jul 2022 18:07:40 +0200 Subject: [PATCH 23/27] Revert maven profile change --- .../src/main/java/org/graalvm/example/H2Example.java | 4 +--- samples/native-config-integration/pom.xml | 7 ++++--- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/samples/metadata-repo-integration/src/main/java/org/graalvm/example/H2Example.java b/samples/metadata-repo-integration/src/main/java/org/graalvm/example/H2Example.java index 644981822..b743611ae 100644 --- a/samples/metadata-repo-integration/src/main/java/org/graalvm/example/H2Example.java +++ b/samples/metadata-repo-integration/src/main/java/org/graalvm/example/H2Example.java @@ -11,9 +11,7 @@ import java.util.List; import java.util.Set; -/** - * @author Moritz Halbritter - */ + public class H2Example { public static final String JDBC_CONNECTION_URL = "jdbc:h2:./data/test"; diff --git a/samples/native-config-integration/pom.xml b/samples/native-config-integration/pom.xml index be9acdd40..959cf5113 100644 --- a/samples/native-config-integration/pom.xml +++ b/samples/native-config-integration/pom.xml @@ -148,10 +148,10 @@ - metadataDefault + metadataLocal - + org.graalvm.buildtools native-maven-plugin @@ -159,10 +159,11 @@ true + ${project.basedir}/config-directory - + From a8c0b51fef7038fcb474d048aa816defd1fc9043 Mon Sep 17 00:00:00 2001 From: Aleksandar Gradinac Date: Wed, 6 Jul 2022 18:20:59 +0200 Subject: [PATCH 24/27] Remove a maven functional test that is now invalid --- .../maven/MetadataRepositoryFunctionalTest.groovy | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/native-maven-plugin/src/functionalTest/groovy/org/graalvm/buildtools/maven/MetadataRepositoryFunctionalTest.groovy b/native-maven-plugin/src/functionalTest/groovy/org/graalvm/buildtools/maven/MetadataRepositoryFunctionalTest.groovy index 2f0c983aa..6d387b4b4 100644 --- a/native-maven-plugin/src/functionalTest/groovy/org/graalvm/buildtools/maven/MetadataRepositoryFunctionalTest.groovy +++ b/native-maven-plugin/src/functionalTest/groovy/org/graalvm/buildtools/maven/MetadataRepositoryFunctionalTest.groovy @@ -55,25 +55,12 @@ class MetadataRepositoryFunctionalTest extends AbstractGraalVMMavenFunctionalTes outputContains "Reflection failed" } - void "it produces a warning if enabled but no repository is configured"() { - given: - withSample("native-config-integration") - - when: - mvn '-Pnative,metadataEnabled', '-DskipTests', 'package', 'exec:exec@native' - - then: - buildSucceeded - outputContains "GraalVM reachability metadata repository is enabled, but no repository has been configured" - outputContains "Reflection failed" - } - void "it can use a metadata repository"() { given: withSample("native-config-integration") when: - mvn '-Pnative,metadataDefault', '-DskipTests', 'package', 'exec:exec@native' + mvn '-Pnative,metadataLocal', '-DskipTests', 'package', 'exec:exec@native' then: buildSucceeded From 3913b1c5bf7c2726805f4c1b650a1372fb3b090d Mon Sep 17 00:00:00 2001 From: Vojin Jovanovic Date: Wed, 6 Jul 2022 22:20:50 +0200 Subject: [PATCH 25/27] mvn: Tests for remote repo and docs --- docs/src/docs/asciidoc/maven-plugin.adoc | 30 +++++++++++----- native-gradle-plugin/README.md | 2 +- ...ialMetadataRepositoryFunctionalTest.groovy | 17 +++++++++ .../build.gradle | 1 - samples/metadata-repo-integration/pom.xml | 36 ++++++++++++++++--- samples/native-config-integration/pom.xml | 16 ++++----- 6 files changed, 80 insertions(+), 22 deletions(-) diff --git a/docs/src/docs/asciidoc/maven-plugin.adoc b/docs/src/docs/asciidoc/maven-plugin.adoc index e12a08b7a..f281e2c52 100644 --- a/docs/src/docs/asciidoc/maven-plugin.adoc +++ b/docs/src/docs/asciidoc/maven-plugin.adoc @@ -556,9 +556,6 @@ command-line argument to Maven as follows. See the documentation for mvn -Pnative -Dagent=true -DagentOptions=periodic-config test ``` -WARNING: If the agent is enabled, the `--allow-incomplete-classpath` option is -automatically added to your native build options. - [[agent-support-running-application]] === Running your application with the agent @@ -595,19 +592,18 @@ mvn -Pnative -Dagent=true -DskipTests package exec:exec@native [[metadata-support]] == GraalVM Reachability Metadata Support -Since release 0.9.12, the plugin adds experimental support for the https://github.com/oracle/graalvm-reachability-metadata/[GraalVM reachability metadata repository]. +Since release 0.9.12, the plugin adds support for the https://github.com/oracle/graalvm-reachability-metadata/[GraalVM reachability metadata repository]. This repository provides https://www.graalvm.org/22.2/reference-manual/native-image/ReachabilityMetadata/[reachability metadata] for libraries that do not support GraalVM Native Image. === Enabling the metadata repository -Support needs to be enabled explicitly: +Support needs to be enabled explicitly by including the following into the `` element: .Enabling the metadata repository [source,xml,indent=0] ---- -include::../../../../samples/native-config-integration/pom.xml[tag=metadata-default] +include::../../../../samples/metadata-repo-integration/pom.xml[tag=metadata-default] ---- -<1> The local path can point to an _exploded_ directory, or to a compressed ZIP file. Alternatively, you can use a _remote repository_, in which case you can specify the URL of the ZIP file: @@ -617,9 +613,27 @@ Alternatively, you can use a _remote repository_, in which case you can specify include::../../../../samples/native-config-integration/pom.xml[tag=metadata-url] ---- +For debugging purposes you can use a local repository: + +.Enabling a local repository +[source,xml,indent=0] +---- +include::../../../../samples/native-config-integration/pom.xml[tag=metadata-local] +---- +<1> The local path can point to an _exploded_ directory, or to a compressed ZIP file. + === Configuring the metadata repository -Once activated, for each library included in the native image, the plugin will automatically search for GraalVM reachability metadata in the repository. +Once activated, for each library included in the native image, the plugin will automatically search for GraalVM reachability metadata in the repository that was released together with the plugin. +In case you want to use another verion of the metadata use: + +.Choosing a version for the metadata repository +[source,xml,indent=0] +---- +include::../../../../samples/metadata-repo-integration/pom.xml[tag=metadata-versioned] +---- + + In some cases, you may need to exclude a particular module from the search. This can be done by configuring that particular dependency: diff --git a/native-gradle-plugin/README.md b/native-gradle-plugin/README.md index 2bb353f1a..a98aae8f5 100644 --- a/native-gradle-plugin/README.md +++ b/native-gradle-plugin/README.md @@ -7,7 +7,7 @@ End-user documentation about the plugins can be found [here](https://graalvm.git ## Building Building of plugin itself should be as simple as: ```bash -./gradlew publishToMavenLocal +./gradlew publishToMavenLocal --no-parallel ``` In order to run testing part of this plugin you need to get (or build) corresponding `junit-platform-native` artifact. diff --git a/native-maven-plugin/src/functionalTest/groovy/org/graalvm/buildtools/maven/OfficialMetadataRepositoryFunctionalTest.groovy b/native-maven-plugin/src/functionalTest/groovy/org/graalvm/buildtools/maven/OfficialMetadataRepositoryFunctionalTest.groovy index 10d152d9b..5beb4a0c9 100644 --- a/native-maven-plugin/src/functionalTest/groovy/org/graalvm/buildtools/maven/OfficialMetadataRepositoryFunctionalTest.groovy +++ b/native-maven-plugin/src/functionalTest/groovy/org/graalvm/buildtools/maven/OfficialMetadataRepositoryFunctionalTest.groovy @@ -58,4 +58,21 @@ class OfficialMetadataRepositoryFunctionalTest extends AbstractGraalVMMavenFunct and: "finds metadata in the remote repository" outputContains "[graalvm reachability metadata repository for com.h2database:h2:2.1.210]: Configuration directory is com.h2database/h2/2.1.210" } + + void "the application runs when using the versioned official metadata repository"() { + given: + withSample("metadata-repo-integration") + + when: + mvn '-PnativeVersioned', '-DskipTests', 'package', 'exec:exec@native' + + then: + buildSucceeded + + and: "the run succeeded and retrieved data from the database" + outputContains "Customers in the database" + + and: "finds metadata in the remote repository" + outputContains "[graalvm reachability metadata repository for com.h2database:h2:2.1.210]: Configuration directory is com.h2database/h2/2.1.210" + } } diff --git a/samples/java-application-with-reflection/build.gradle b/samples/java-application-with-reflection/build.gradle index c36340782..c5f00982a 100644 --- a/samples/java-application-with-reflection/build.gradle +++ b/samples/java-application-with-reflection/build.gradle @@ -84,7 +84,6 @@ graalvmNative { binaries { test { verbose = true - buildArgs('--allow-incomplete-classpath') } } } diff --git a/samples/metadata-repo-integration/pom.xml b/samples/metadata-repo-integration/pom.xml index e5af99bd0..1f3a0fb70 100644 --- a/samples/metadata-repo-integration/pom.xml +++ b/samples/metadata-repo-integration/pom.xml @@ -86,19 +86,47 @@ - false - ${imageName} - false + true + + + + + + + + nativeVersioned + + + + org.graalvm.buildtools + native-maven-plugin + ${native.maven.plugin.version} + true + + + build-native + + build + + package + + + + + + true + 0.1.0 + + - ${project.artifactId} diff --git a/samples/native-config-integration/pom.xml b/samples/native-config-integration/pom.xml index 959cf5113..f2cff3d5f 100644 --- a/samples/native-config-integration/pom.xml +++ b/samples/native-config-integration/pom.xml @@ -151,19 +151,19 @@ metadataLocal - org.graalvm.buildtools native-maven-plugin ${native.maven.plugin.version} + true ${project.basedir}/config-directory + - @@ -227,12 +227,12 @@ metadataExclude - org.graalvm.buildtools native-maven-plugin ${native.maven.plugin.version} + true ${project.basedir}/config-directory @@ -244,9 +244,9 @@ + - @@ -254,13 +254,13 @@ metadataForceVersion - org.graalvm.buildtools native-maven-plugin ${native.maven.plugin.version} false + true ${project.basedir}/config-directory @@ -272,9 +272,9 @@ + - @@ -341,20 +341,20 @@ - org.graalvm.buildtools native-maven-plugin ${native.maven.plugin.version} false + true ${metadata.url} + - From 9462ee23b80a1734323d289585888a8d5a7b8c0c Mon Sep 17 00:00:00 2001 From: Aleksandar Gradinac Date: Thu, 7 Jul 2022 03:14:49 +0200 Subject: [PATCH 26/27] Revert `native-config-integration` sample changes --- samples/native-config-integration/build.gradle | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/samples/native-config-integration/build.gradle b/samples/native-config-integration/build.gradle index 8919cad54..dc38d47af 100644 --- a/samples/native-config-integration/build.gradle +++ b/samples/native-config-integration/build.gradle @@ -70,6 +70,10 @@ tasks.withType(Test).configureEach { graalvmNative { metadataRepository { enabled = true + def extension = System.getProperty("extension", '') + def repo = file("config-directory${extension ? '.' + extension : ''}") + println("Using config repo: $repo") + uri(repo) } binaries.all { verbose = true From 39a128994c94c0af9ed3d74fcc18c19e14840625 Mon Sep 17 00:00:00 2001 From: Cedric Champeau Date: Thu, 7 Jul 2022 12:56:47 +0200 Subject: [PATCH 27/27] Release 0.9.13 --- gradle/libs.versions.toml | 2 +- native-maven-plugin/reproducers/issue-144/pom.xml | 4 ++-- samples/java-application-with-custom-tests/gradle.properties | 2 +- .../java-application-with-extra-sourceset/gradle.properties | 2 +- samples/java-application-with-reflection/gradle.properties | 2 +- samples/java-application-with-reflection/pom.xml | 4 ++-- samples/java-application-with-resources/gradle.properties | 2 +- samples/java-application-with-resources/pom.xml | 4 ++-- samples/java-application-with-tests/gradle.properties | 2 +- samples/java-application-with-tests/pom.xml | 4 ++-- samples/java-application/gradle.properties | 2 +- samples/java-application/pom.xml | 4 ++-- samples/java-library/gradle.properties | 2 +- samples/java-library/pom.xml | 4 ++-- samples/kotlin-application-with-tests/gradle.properties | 2 +- samples/metadata-repo-integration/gradle.properties | 2 +- samples/metadata-repo-integration/pom.xml | 4 ++-- samples/multi-project-with-tests/gradle.properties | 2 +- samples/native-config-integration/gradle.properties | 2 +- samples/native-config-integration/pom.xml | 4 ++-- 20 files changed, 28 insertions(+), 28 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c9b292219..ed2f7379b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,6 +1,6 @@ [versions] # Project versions -nativeBuildTools = "0.9.13-SNAPSHOT" +nativeBuildTools = "0.9.13" # External dependencies spock = "2.1-groovy-3.0" diff --git a/native-maven-plugin/reproducers/issue-144/pom.xml b/native-maven-plugin/reproducers/issue-144/pom.xml index f30215ec1..004761d01 100644 --- a/native-maven-plugin/reproducers/issue-144/pom.xml +++ b/native-maven-plugin/reproducers/issue-144/pom.xml @@ -56,8 +56,8 @@ 1.8 UTF-8 - 0.9.13-SNAPSHOT - 0.9.13-SNAPSHOT + 0.9.13 + 0.9.13 example-app org.graalvm.demo.Application diff --git a/samples/java-application-with-custom-tests/gradle.properties b/samples/java-application-with-custom-tests/gradle.properties index 29748bf5b..8423039b8 100644 --- a/samples/java-application-with-custom-tests/gradle.properties +++ b/samples/java-application-with-custom-tests/gradle.properties @@ -1,3 +1,3 @@ -native.gradle.plugin.version = 0.9.13-SNAPSHOT +native.gradle.plugin.version = 0.9.13 junit.jupiter.version = 5.8.1 junit.platform.version = 1.8.1 diff --git a/samples/java-application-with-extra-sourceset/gradle.properties b/samples/java-application-with-extra-sourceset/gradle.properties index 29748bf5b..8423039b8 100644 --- a/samples/java-application-with-extra-sourceset/gradle.properties +++ b/samples/java-application-with-extra-sourceset/gradle.properties @@ -1,3 +1,3 @@ -native.gradle.plugin.version = 0.9.13-SNAPSHOT +native.gradle.plugin.version = 0.9.13 junit.jupiter.version = 5.8.1 junit.platform.version = 1.8.1 diff --git a/samples/java-application-with-reflection/gradle.properties b/samples/java-application-with-reflection/gradle.properties index 29748bf5b..8423039b8 100644 --- a/samples/java-application-with-reflection/gradle.properties +++ b/samples/java-application-with-reflection/gradle.properties @@ -1,3 +1,3 @@ -native.gradle.plugin.version = 0.9.13-SNAPSHOT +native.gradle.plugin.version = 0.9.13 junit.jupiter.version = 5.8.1 junit.platform.version = 1.8.1 diff --git a/samples/java-application-with-reflection/pom.xml b/samples/java-application-with-reflection/pom.xml index a524af7de..f9a54145d 100644 --- a/samples/java-application-with-reflection/pom.xml +++ b/samples/java-application-with-reflection/pom.xml @@ -52,8 +52,8 @@ 1.8 UTF-8 5.8.1 - 0.9.13-SNAPSHOT - 0.9.13-SNAPSHOT + 0.9.13 + 0.9.13 example-app org.graalvm.demo.Application diff --git a/samples/java-application-with-resources/gradle.properties b/samples/java-application-with-resources/gradle.properties index 29748bf5b..8423039b8 100644 --- a/samples/java-application-with-resources/gradle.properties +++ b/samples/java-application-with-resources/gradle.properties @@ -1,3 +1,3 @@ -native.gradle.plugin.version = 0.9.13-SNAPSHOT +native.gradle.plugin.version = 0.9.13 junit.jupiter.version = 5.8.1 junit.platform.version = 1.8.1 diff --git a/samples/java-application-with-resources/pom.xml b/samples/java-application-with-resources/pom.xml index 0526711a7..454776d0f 100644 --- a/samples/java-application-with-resources/pom.xml +++ b/samples/java-application-with-resources/pom.xml @@ -51,9 +51,9 @@ 1.8 UTF-8 - 0.9.13-SNAPSHOT + 0.9.13 5.8.1 - 0.9.13-SNAPSHOT + 0.9.13 example-app org.graalvm.demo.Application diff --git a/samples/java-application-with-tests/gradle.properties b/samples/java-application-with-tests/gradle.properties index 29748bf5b..8423039b8 100644 --- a/samples/java-application-with-tests/gradle.properties +++ b/samples/java-application-with-tests/gradle.properties @@ -1,3 +1,3 @@ -native.gradle.plugin.version = 0.9.13-SNAPSHOT +native.gradle.plugin.version = 0.9.13 junit.jupiter.version = 5.8.1 junit.platform.version = 1.8.1 diff --git a/samples/java-application-with-tests/pom.xml b/samples/java-application-with-tests/pom.xml index 27aa997b7..009a4100c 100644 --- a/samples/java-application-with-tests/pom.xml +++ b/samples/java-application-with-tests/pom.xml @@ -52,8 +52,8 @@ 1.8 UTF-8 5.8.1 - 0.9.13-SNAPSHOT - 0.9.13-SNAPSHOT + 0.9.13 + 0.9.13 example-app org.graalvm.demo.Application diff --git a/samples/java-application/gradle.properties b/samples/java-application/gradle.properties index 29748bf5b..8423039b8 100644 --- a/samples/java-application/gradle.properties +++ b/samples/java-application/gradle.properties @@ -1,3 +1,3 @@ -native.gradle.plugin.version = 0.9.13-SNAPSHOT +native.gradle.plugin.version = 0.9.13 junit.jupiter.version = 5.8.1 junit.platform.version = 1.8.1 diff --git a/samples/java-application/pom.xml b/samples/java-application/pom.xml index b8545b262..f53ae5981 100644 --- a/samples/java-application/pom.xml +++ b/samples/java-application/pom.xml @@ -51,8 +51,8 @@ 1.8 UTF-8 - 0.9.13-SNAPSHOT - 0.9.13-SNAPSHOT + 0.9.13 + 0.9.13 example-app org.graalvm.demo.Application diff --git a/samples/java-library/gradle.properties b/samples/java-library/gradle.properties index 29748bf5b..8423039b8 100644 --- a/samples/java-library/gradle.properties +++ b/samples/java-library/gradle.properties @@ -1,3 +1,3 @@ -native.gradle.plugin.version = 0.9.13-SNAPSHOT +native.gradle.plugin.version = 0.9.13 junit.jupiter.version = 5.8.1 junit.platform.version = 1.8.1 diff --git a/samples/java-library/pom.xml b/samples/java-library/pom.xml index 14b800b04..e38bb3b1e 100644 --- a/samples/java-library/pom.xml +++ b/samples/java-library/pom.xml @@ -51,8 +51,8 @@ 1.8 UTF-8 - 0.9.13-SNAPSHOT - 0.9.13-SNAPSHOT + 0.9.13 + 0.9.13 java-library diff --git a/samples/kotlin-application-with-tests/gradle.properties b/samples/kotlin-application-with-tests/gradle.properties index 29748bf5b..8423039b8 100644 --- a/samples/kotlin-application-with-tests/gradle.properties +++ b/samples/kotlin-application-with-tests/gradle.properties @@ -1,3 +1,3 @@ -native.gradle.plugin.version = 0.9.13-SNAPSHOT +native.gradle.plugin.version = 0.9.13 junit.jupiter.version = 5.8.1 junit.platform.version = 1.8.1 diff --git a/samples/metadata-repo-integration/gradle.properties b/samples/metadata-repo-integration/gradle.properties index b59b5f944..4d1f205d7 100644 --- a/samples/metadata-repo-integration/gradle.properties +++ b/samples/metadata-repo-integration/gradle.properties @@ -1,2 +1,2 @@ -native.gradle.plugin.version = 0.9.13-SNAPSHOT +native.gradle.plugin.version = 0.9.13 h2.version = 2.1.210 diff --git a/samples/metadata-repo-integration/pom.xml b/samples/metadata-repo-integration/pom.xml index 1f3a0fb70..0edcff4e2 100644 --- a/samples/metadata-repo-integration/pom.xml +++ b/samples/metadata-repo-integration/pom.xml @@ -51,8 +51,8 @@ 1.8 UTF-8 - 0.9.13-SNAPSHOT - 0.9.13-SNAPSHOT + 0.9.13 + 0.9.13 2.1.210 h2-demo org.graalvm.example.H2Example diff --git a/samples/multi-project-with-tests/gradle.properties b/samples/multi-project-with-tests/gradle.properties index 29748bf5b..8423039b8 100644 --- a/samples/multi-project-with-tests/gradle.properties +++ b/samples/multi-project-with-tests/gradle.properties @@ -1,3 +1,3 @@ -native.gradle.plugin.version = 0.9.13-SNAPSHOT +native.gradle.plugin.version = 0.9.13 junit.jupiter.version = 5.8.1 junit.platform.version = 1.8.1 diff --git a/samples/native-config-integration/gradle.properties b/samples/native-config-integration/gradle.properties index 29748bf5b..8423039b8 100644 --- a/samples/native-config-integration/gradle.properties +++ b/samples/native-config-integration/gradle.properties @@ -1,3 +1,3 @@ -native.gradle.plugin.version = 0.9.13-SNAPSHOT +native.gradle.plugin.version = 0.9.13 junit.jupiter.version = 5.8.1 junit.platform.version = 1.8.1 diff --git a/samples/native-config-integration/pom.xml b/samples/native-config-integration/pom.xml index f2cff3d5f..061d8da99 100644 --- a/samples/native-config-integration/pom.xml +++ b/samples/native-config-integration/pom.xml @@ -51,8 +51,8 @@ 1.8 UTF-8 - 0.9.13-SNAPSHOT - 0.9.13-SNAPSHOT + 0.9.13 + 0.9.13 example-app org.graalvm.example.Application