From e8aa5680d6aee970ec3f3a1dfffe18fd28db5059 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 20 Sep 2022 14:06:18 +0100 Subject: [PATCH] Support file-based reachability metadata repositories See gh-32408 --- .../plugin/NativeImagePluginAction.java | 15 +- ...tiveImagePluginActionIntegrationTests.java | 19 ++ ...lesFromFileRepositoryAreCopiedToJar.gradle | 26 ++ .../logback-classic/1.2.11/index.json | 3 + .../1.2.11/reflect-config.json | 299 ++++++++++++++++++ .../ch.qos.logback/logback-classic/index.json | 10 + .../index.json | 10 + .../org.jline/jline/3.21.0/index.json | 6 + .../org.jline/jline/3.21.0/jni-config.json | 128 ++++++++ .../org.jline/jline/3.21.0/proxy-config.json | 10 + .../jline/3.21.0/reflect-config.json | 104 ++++++ .../jline/3.21.0/resource-config.json | 139 ++++++++ .../org.jline/jline/index.json | 10 + 13 files changed, 776 insertions(+), 3 deletions(-) create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests-reachabilityMetadataConfigurationFilesFromFileRepositoryAreCopiedToJar.gradle create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/ch.qos.logback/logback-classic/1.2.11/index.json create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/ch.qos.logback/logback-classic/1.2.11/reflect-config.json create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/ch.qos.logback/logback-classic/index.json create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/index.json create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/3.21.0/index.json create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/3.21.0/jni-config.json create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/3.21.0/proxy-config.json create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/3.21.0/reflect-config.json create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/3.21.0/resource-config.json create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/index.json diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/NativeImagePluginAction.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/NativeImagePluginAction.java index 28aa38ba764..e88c99a06d6 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/NativeImagePluginAction.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/NativeImagePluginAction.java @@ -17,6 +17,7 @@ package org.springframework.boot.gradle.plugin; import java.io.File; +import java.net.URI; import java.nio.file.Path; import org.graalvm.buildtools.gradle.NativeImagePlugin; @@ -31,6 +32,7 @@ import org.gradle.api.file.FileCopyDetails; import org.gradle.api.plugins.ExtensionAware; import org.gradle.api.plugins.JavaPlugin; import org.gradle.api.plugins.JavaPluginExtension; +import org.gradle.api.provider.Property; import org.gradle.api.tasks.SourceSet; import org.gradle.api.tasks.SourceSetContainer; @@ -87,17 +89,24 @@ class NativeImagePluginAction implements PluginApplicationAction { private void copyReachabilityMetadataToBootJar(Project project, GraalVMExtension graalVmExtension) { Path repositoryCacheDir = new File(project.getGradle().getGradleUserHomeDir(), "native-build-tools/repositories").toPath(); + project.getTasks().named(SpringBootPlugin.BOOT_JAR_TASK_NAME, BootJar.class).configure((bootJar) -> { NativeImageOptions options = graalVmExtension.getBinaries().named(NativeImagePlugin.NATIVE_MAIN_EXTENSION) .get(); + GraalVMReachabilityMetadataRepositoryExtension metadataRepositoryExtension = ((ExtensionAware) graalVmExtension) + .getExtensions().getByType(GraalVMReachabilityMetadataRepositoryExtension.class); + Property metadataRepositoryUri = metadataRepositoryExtension.getUri(); bootJar.from(options.getConfigurationFileDirectories()) - .eachFile((file) -> normalizePathIfNecessary(repositoryCacheDir, file)); + .eachFile((file) -> normalizePathIfNecessary(repositoryCacheDir, metadataRepositoryUri, file)); }); } - private void normalizePathIfNecessary(Path repositoryCacheDir, FileCopyDetails configurationFile) { + private void normalizePathIfNecessary(Path repositoryCacheDir, Property metadataRepositoryUri, + FileCopyDetails configurationFile) { Path configurationFilePath = configurationFile.getFile().toPath(); - if (configurationFilePath.startsWith(repositoryCacheDir)) { + Path repositoryMetadataRoot = ("file".equals(metadataRepositoryUri.get().getScheme())) + ? Path.of(metadataRepositoryUri.get()) : repositoryCacheDir; + if (configurationFilePath.startsWith(repositoryMetadataRoot)) { Path versionDir = configurationFilePath.getParent(); Path artifactDir = versionDir.getParent(); Path groupDir = artifactDir.getParent(); diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests.java index 14f1f3dda6d..047848ca2cb 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests.java @@ -32,6 +32,7 @@ import org.junit.jupiter.api.TestTemplate; import org.springframework.boot.gradle.junit.GradleCompatibility; import org.springframework.boot.testsupport.gradle.testkit.GradleBuild; +import org.springframework.util.FileSystemUtils; import static org.assertj.core.api.Assertions.assertThat; @@ -68,6 +69,24 @@ class NativeImagePluginActionIntegrationTests { "META-INF/native-image/org.jline/jline/3.21.0/resource-config.json"); } + @TestTemplate + void reachabilityMetadataConfigurationFilesFromFileRepositoryAreCopiedToJar() throws IOException { + writeDummyAotProcessorMainClass(); + FileSystemUtils.copyRecursively(new File("src/test/resources/reachability-metadata-repository"), + new File(this.gradleBuild.getProjectDir(), "reachability-metadata-repository")); + BuildResult result = this.gradleBuild.build("bootJar"); + assertThat(result.task(":bootJar").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + File buildLibs = new File(this.gradleBuild.getProjectDir(), "build/libs"); + File jarFile = new File(buildLibs, this.gradleBuild.getProjectDir().getName() + ".jar"); + assertThat(buildLibs.listFiles()).contains(jarFile); + assertThat(getEntryNames(jarFile)).contains( + "META-INF/native-image/ch.qos.logback/logback-classic/1.2.11/reflect-config.json", + "META-INF/native-image/org.jline/jline/3.21.0/jni-config.json", + "META-INF/native-image/org.jline/jline/3.21.0/proxy-config.json", + "META-INF/native-image/org.jline/jline/3.21.0/reflect-config.json", + "META-INF/native-image/org.jline/jline/3.21.0/resource-config.json"); + } + private void writeDummyAotProcessorMainClass() { File examplePackage = new File(this.gradleBuild.getProjectDir(), "src/main/java/org/springframework/boot"); examplePackage.mkdirs(); diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests-reachabilityMetadataConfigurationFilesFromFileRepositoryAreCopiedToJar.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests-reachabilityMetadataConfigurationFilesFromFileRepositoryAreCopiedToJar.gradle new file mode 100644 index 00000000000..f9f24dcf1a8 --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/NativeImagePluginActionIntegrationTests-reachabilityMetadataConfigurationFilesFromFileRepositoryAreCopiedToJar.gradle @@ -0,0 +1,26 @@ +plugins { + id 'java' + id 'org.springframework.boot' + id 'org.springframework.boot.aot' +} + +apply plugin: 'org.graalvm.buildtools.native' + +repositories { + mavenCentral() +} + +dependencies { + implementation "ch.qos.logback:logback-classic:1.2.11" + implementation "org.jline:jline:3.21.0" +} + +graalvmNative { + metadataRepository { + uri(file("reachability-metadata-repository")) + } + // see https://github.com/graalvm/native-build-tools/issues/302 + agent { + tasksToInstrumentPredicate = { t -> false } as java.util.function.Predicate + } +} \ No newline at end of file diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/ch.qos.logback/logback-classic/1.2.11/index.json b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/ch.qos.logback/logback-classic/1.2.11/index.json new file mode 100644 index 00000000000..768b5502a0b --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/ch.qos.logback/logback-classic/1.2.11/index.json @@ -0,0 +1,3 @@ +[ + "reflect-config.json" +] diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/ch.qos.logback/logback-classic/1.2.11/reflect-config.json b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/ch.qos.logback/logback-classic/1.2.11/reflect-config.json new file mode 100644 index 00000000000..a0856ee205b --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/ch.qos.logback/logback-classic/1.2.11/reflect-config.json @@ -0,0 +1,299 @@ +[ + { + "condition": { + "typeReachable": "ch.qos.logback.classic.LoggerContext" + }, + "name": "ch.qos.logback.classic.pattern.CallerDataConverter", + "allPublicConstructors": true + }, + { + "condition": { + "typeReachable": "ch.qos.logback.classic.LoggerContext" + }, + "name": "ch.qos.logback.classic.pattern.CallerDataConverter", + "allPublicConstructors": true + }, + { + "condition": { + "typeReachable": "ch.qos.logback.classic.LoggerContext" + }, + "name": "ch.qos.logback.classic.pattern.ClassOfCallerConverter", + "allPublicConstructors": true + }, + { + "condition": { + "typeReachable": "ch.qos.logback.classic.LoggerContext" + }, + "name": "ch.qos.logback.classic.pattern.ContextNameConverter", + "allPublicConstructors": true + }, + { + "condition": { + "typeReachable": "ch.qos.logback.classic.LoggerContext" + }, + "name": "ch.qos.logback.classic.pattern.DateConverter", + "allPublicConstructors": true + }, + { + "condition": { + "typeReachable": "ch.qos.logback.classic.LoggerContext" + }, + "name": "ch.qos.logback.classic.pattern.ExtendedThrowableProxyConverter", + "allPublicConstructors": true + }, + { + "condition": { + "typeReachable": "ch.qos.logback.classic.LoggerContext" + }, + "name": "ch.qos.logback.classic.pattern.FileOfCallerConverter", + "allPublicConstructors": true + }, + { + "condition": { + "typeReachable": "ch.qos.logback.classic.LoggerContext" + }, + "name": "ch.qos.logback.classic.pattern.LevelConverter", + "allPublicConstructors": true + }, + { + "condition": { + "typeReachable": "ch.qos.logback.classic.LoggerContext" + }, + "name": "ch.qos.logback.classic.pattern.LineOfCallerConverter", + "allPublicConstructors": true + }, + { + "condition": { + "typeReachable": "ch.qos.logback.classic.LoggerContext" + }, + "name": "ch.qos.logback.classic.pattern.LineSeparatorConverter", + "allPublicConstructors": true + }, + { + "condition": { + "typeReachable": "ch.qos.logback.classic.LoggerContext" + }, + "name": "ch.qos.logback.classic.pattern.LocalSequenceNumberConverter", + "allPublicConstructors": true + }, + { + "condition": { + "typeReachable": "ch.qos.logback.classic.LoggerContext" + }, + "name": "ch.qos.logback.classic.pattern.LoggerConverter", + "allPublicConstructors": true + }, + { + "condition": { + "typeReachable": "ch.qos.logback.classic.LoggerContext" + }, + "name": "ch.qos.logback.classic.pattern.MDCConverter", + "allPublicConstructors": true + }, + { + "condition": { + "typeReachable": "ch.qos.logback.classic.LoggerContext" + }, + "name": "ch.qos.logback.classic.pattern.MarkerConverter", + "allPublicConstructors": true + }, + { + "condition": { + "typeReachable": "ch.qos.logback.classic.LoggerContext" + }, + "name": "ch.qos.logback.classic.pattern.MessageConverter", + "allPublicConstructors": true + }, + { + "condition": { + "typeReachable": "ch.qos.logback.classic.LoggerContext" + }, + "name": "ch.qos.logback.classic.pattern.MethodOfCallerConverter", + "allPublicConstructors": true + }, + { + "condition": { + "typeReachable": "ch.qos.logback.classic.LoggerContext" + }, + "name": "ch.qos.logback.classic.pattern.NopThrowableInformationConverter", + "allPublicConstructors": true + }, + { + "condition": { + "typeReachable": "ch.qos.logback.classic.LoggerContext" + }, + "name": "ch.qos.logback.classic.pattern.PrefixCompositeConverter", + "allPublicConstructors": true + }, + { + "condition": { + "typeReachable": "ch.qos.logback.classic.LoggerContext" + }, + "name": "ch.qos.logback.classic.pattern.PropertyConverter", + "allPublicConstructors": true + }, + { + "condition": { + "typeReachable": "ch.qos.logback.classic.LoggerContext" + }, + "name": "ch.qos.logback.classic.pattern.RelativeTimeConverter", + "allPublicConstructors": true + }, + { + "condition": { + "typeReachable": "ch.qos.logback.classic.LoggerContext" + }, + "name": "ch.qos.logback.classic.pattern.RootCauseFirstThrowableProxyConverter", + "allPublicConstructors": true + }, + { + "condition": { + "typeReachable": "ch.qos.logback.classic.LoggerContext" + }, + "name": "ch.qos.logback.classic.pattern.ThreadConverter", + "allPublicConstructors": true + }, + { + "condition": { + "typeReachable": "ch.qos.logback.classic.LoggerContext" + }, + "name": "ch.qos.logback.classic.pattern.ThrowableProxyConverter", + "allPublicConstructors": true + }, + { + "condition": { + "typeReachable": "ch.qos.logback.classic.LoggerContext" + }, + "name": "ch.qos.logback.classic.pattern.color.HighlightingCompositeConverter", + "allPublicConstructors": true + }, + { + "condition": { + "typeReachable": "ch.qos.logback.classic.LoggerContext" + }, + "name": "ch.qos.logback.core.pattern.IdentityCompositeConverter", + "allPublicConstructors": true + }, + { + "condition": { + "typeReachable": "ch.qos.logback.classic.LoggerContext" + }, + "name": "ch.qos.logback.core.pattern.ReplacingCompositeConverter", + "allPublicConstructors": true + }, + { + "condition": { + "typeReachable": "ch.qos.logback.classic.LoggerContext" + }, + "name": "ch.qos.logback.core.pattern.color.BlackCompositeConverter", + "allPublicConstructors": true + }, + { + "condition": { + "typeReachable": "ch.qos.logback.classic.LoggerContext" + }, + "name": "ch.qos.logback.core.pattern.color.BlueCompositeConverter", + "allPublicConstructors": true + }, + { + "condition": { + "typeReachable": "ch.qos.logback.classic.LoggerContext" + }, + "name": "ch.qos.logback.core.pattern.color.BoldBlueCompositeConverter", + "allPublicConstructors": true + }, + { + "condition": { + "typeReachable": "ch.qos.logback.classic.LoggerContext" + }, + "name": "ch.qos.logback.core.pattern.color.BoldCyanCompositeConverter", + "allPublicConstructors": true + }, + { + "condition": { + "typeReachable": "ch.qos.logback.classic.LoggerContext" + }, + "name": "ch.qos.logback.core.pattern.color.BoldGreenCompositeConverter", + "allPublicConstructors": true + }, + { + "condition": { + "typeReachable": "ch.qos.logback.classic.LoggerContext" + }, + "name": "ch.qos.logback.core.pattern.color.BoldMagentaCompositeConverter", + "allPublicConstructors": true + }, + { + "condition": { + "typeReachable": "ch.qos.logback.classic.LoggerContext" + }, + "name": "ch.qos.logback.core.pattern.color.BoldRedCompositeConverter", + "allPublicConstructors": true + }, + { + "condition": { + "typeReachable": "ch.qos.logback.classic.LoggerContext" + }, + "name": "ch.qos.logback.core.pattern.color.BoldWhiteCompositeConverter", + "allPublicConstructors": true + }, + { + "condition": { + "typeReachable": "ch.qos.logback.classic.LoggerContext" + }, + "name": "ch.qos.logback.core.pattern.color.BoldYellowCompositeConverter", + "allPublicConstructors": true + }, + { + "condition": { + "typeReachable": "ch.qos.logback.classic.LoggerContext" + }, + "name": "ch.qos.logback.core.pattern.color.CyanCompositeConverter", + "allPublicConstructors": true + }, + { + "condition": { + "typeReachable": "ch.qos.logback.classic.LoggerContext" + }, + "name": "ch.qos.logback.core.pattern.color.GrayCompositeConverter", + "allPublicConstructors": true + }, + { + "condition": { + "typeReachable": "ch.qos.logback.classic.LoggerContext" + }, + "name": "ch.qos.logback.core.pattern.color.GreenCompositeConverter", + "allPublicConstructors": true + }, + { + "condition": { + "typeReachable": "ch.qos.logback.classic.LoggerContext" + }, + "name": "ch.qos.logback.core.pattern.color.MagentaCompositeConverter", + "allPublicConstructors": true + }, + { + "condition": { + "typeReachable": "ch.qos.logback.classic.LoggerContext" + }, + "name": "ch.qos.logback.core.pattern.color.RedCompositeConverter", + "allPublicConstructors": true + }, + { + "condition": { + "typeReachable": "ch.qos.logback.classic.LoggerContext" + }, + "name": "ch.qos.logback.core.pattern.color.WhiteCompositeConverter", + "allPublicConstructors": true + }, + { + "condition": { + "typeReachable": "ch.qos.logback.classic.LoggerContext" + }, + "name": "ch.qos.logback.core.pattern.color.YellowCompositeConverter", + "allPublicConstructors": true + }, + { + "name": "org.slf4j.impl.StaticLoggerBinder" + } +] diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/ch.qos.logback/logback-classic/index.json b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/ch.qos.logback/logback-classic/index.json new file mode 100644 index 00000000000..5b18ab62a49 --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/ch.qos.logback/logback-classic/index.json @@ -0,0 +1,10 @@ +[ + { + "latest": true, + "metadata-version": "1.2.11", + "module": "ch.qos.logback:logback-classic", + "tested-versions": [ + "1.2.11" + ] + } +] diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/index.json b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/index.json new file mode 100644 index 00000000000..50b6690a49c --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/index.json @@ -0,0 +1,10 @@ +[ + { + "directory": "org.jline/jline", + "module": "org.jline:jline" + }, + { + "directory": "ch.qos.logback/logback-classic", + "module": "ch.qos.logback:logback-classic" + } +] diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/3.21.0/index.json b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/3.21.0/index.json new file mode 100644 index 00000000000..554ddf047aa --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/3.21.0/index.json @@ -0,0 +1,6 @@ +[ + "jni-config.json", + "proxy-config.json", + "reflect-config.json", + "resource-config.json" +] diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/3.21.0/jni-config.json b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/3.21.0/jni-config.json new file mode 100644 index 00000000000..85d5b8db21c --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/3.21.0/jni-config.json @@ -0,0 +1,128 @@ +[ + { + "condition": { + "typeReachable": "org.jline.terminal.impl.jansi.JansiNativePty" + }, + "fields": [ + { + "name": "HAVE_ISATTY" + }, + { + "name": "HAVE_TTYNAME" + }, + { + "name": "TCSADRAIN" + }, + { + "name": "TCSAFLUSH" + }, + { + "name": "TCSANOW" + }, + { + "name": "TIOCGETD" + }, + { + "name": "TIOCGWINSZ" + }, + { + "name": "TIOCSETD" + }, + { + "name": "TIOCSWINSZ" + } + ], + "name": "org.fusesource.jansi.internal.CLibrary" + }, + { + "allDeclaredFields": true, + "condition": { + "typeReachable": "org.fusesource.jansi.internal.CLibrary$WinSize" + }, + "name": "org.fusesource.jansi.internal.CLibrary$WinSize" + }, + { + "allDeclaredFields": true, + "condition": { + "typeReachable": "org.fusesource.jansi.internal.CLibrary$Termios" + }, + "name": "org.fusesource.jansi.internal.CLibrary$Termios" + }, + { + "allDeclaredFields": true, + "condition": { + "typeReachable": "org.fusesource.jansi.internal.Kernel32" + }, + "name": "org.fusesource.jansi.internal.Kernel32" + }, + { + "allDeclaredFields": true, + "condition": { + "typeReachable": "org.fusesource.jansi.internal.Kernel32$SMALL_RECT" + }, + "name": "org.fusesource.jansi.internal.Kernel32$SMALL_RECT" + }, + { + "allDeclaredFields": true, + "condition": { + "typeReachable": "org.fusesource.jansi.internal.Kernel32$COORD" + }, + "name": "org.fusesource.jansi.internal.Kernel32$COORD" + }, + { + "allDeclaredFields": true, + "condition": { + "typeReachable": "org.fusesource.jansi.internal.Kernel32$CONSOLE_SCREEN_BUFFER_INFO" + }, + "name": "org.fusesource.jansi.internal.Kernel32$CONSOLE_SCREEN_BUFFER_INFO" + }, + { + "allDeclaredFields": true, + "condition": { + "typeReachable": "org.fusesource.jansi.internal.Kernel32$CHAR_INFO" + }, + "name": "org.fusesource.jansi.internal.Kernel32$CHAR_INFO" + }, + { + "allDeclaredFields": true, + "condition": { + "typeReachable": "org.fusesource.jansi.internal.Kernel32$KEY_EVENT_RECORD" + }, + "name": "org.fusesource.jansi.internal.Kernel32$KEY_EVENT_RECORD" + }, + { + "allDeclaredFields": true, + "condition": { + "typeReachable": "org.fusesource.jansi.internal.Kernel32$MOUSE_EVENT_RECORD" + }, + "name": "org.fusesource.jansi.internal.Kernel32$MOUSE_EVENT_RECORD" + }, + { + "allDeclaredFields": true, + "condition": { + "typeReachable": "org.fusesource.jansi.internal.Kernel32$WINDOW_BUFFER_SIZE_RECORD" + }, + "name": "org.fusesource.jansi.internal.Kernel32$WINDOW_BUFFER_SIZE_RECORD" + }, + { + "allDeclaredFields": true, + "condition": { + "typeReachable": "org.fusesource.jansi.internal.Kernel32$FOCUS_EVENT_RECORD" + }, + "name": "org.fusesource.jansi.internal.Kernel32$FOCUS_EVENT_RECORD" + }, + { + "allDeclaredFields": true, + "condition": { + "typeReachable": "org.fusesource.jansi.internal.Kernel32$MENU_EVENT_RECORD" + }, + "name": "org.fusesource.jansi.internal.Kernel32$MENU_EVENT_RECORD" + }, + { + "allDeclaredFields": true, + "condition": { + "typeReachable": "org.fusesource.jansi.internal.Kernel32$INPUT_RECORD" + }, + "name": "org.fusesource.jansi.internal.Kernel32$INPUT_RECORD" + } +] diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/3.21.0/proxy-config.json b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/3.21.0/proxy-config.json new file mode 100644 index 00000000000..30918f9df6f --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/3.21.0/proxy-config.json @@ -0,0 +1,10 @@ +[ + { + "condition": { + "typeReachable": "org.jline.utils.Signals" + }, + "interfaces": [ + "sun.misc.SignalHandler" + ] + } +] diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/3.21.0/reflect-config.json b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/3.21.0/reflect-config.json new file mode 100644 index 00000000000..665ebda9477 --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/3.21.0/reflect-config.json @@ -0,0 +1,104 @@ +[ + { + "condition": { + "typeReachable": "org.jline.terminal.impl.jansi.JansiNativePty" + }, + "name": "java.io.FileDescriptor", + "queriedMethods": [ + { + "name": "", + "parameterTypes": [ + "int" + ] + } + ] + }, + { + "condition": { + "typeReachable": "org.jline.terminal.TerminalBuilder" + }, + "methods": [ + { + "name": "current", + "parameterTypes": [] + }, + { + "name": "info", + "parameterTypes": [] + }, + { + "name": "parent", + "parameterTypes": [] + } + ], + "name": "java.lang.ProcessHandle" + }, + { + "condition": { + "typeReachable": "org.jline.terminal.TerminalBuilder" + }, + "methods": [ + { + "name": "command", + "parameterTypes": [] + } + ], + "name": "java.lang.ProcessHandle$Info" + }, + { + "condition": { + "typeReachable": "org.jline.builtins.Styles" + }, + "methods": [ + { + "name": "get", + "parameterTypes": [] + } + ], + "name": "org.jline.console.SystemRegistry" + }, + { + "condition": { + "typeReachable": "org.jline.utils.Signals" + }, + "methods": [ + { + "name": "", + "parameterTypes": [ + "java.lang.String" + ] + }, + { + "name": "handle", + "parameterTypes": [ + "sun.misc.Signal", + "sun.misc.SignalHandler" + ] + } + ], + "name": "sun.misc.Signal" + }, + { + "condition": { + "typeReachable": "org.jline.utils.Signals" + }, + "fields": [ + { + "name": "SIG_DFL" + } + ], + "name": "sun.misc.SignalHandler" + }, + { + "allDeclaredClasses": true, + "allDeclaredConstructors": true, + "allDeclaredMethods": true, + "allPublicClasses": true, + "allPublicConstructors": true, + "allPublicMethods": true, + "condition": { + "typeReachable": "org.jline.terminal.TerminalBuilder" + }, + "name": "sun.misc.SignalHandler" + } +] diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/3.21.0/resource-config.json b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/3.21.0/resource-config.json new file mode 100644 index 00000000000..65fed15e105 --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/3.21.0/resource-config.json @@ -0,0 +1,139 @@ +{ + "bundles": [], + "resources": { + "includes": [ + { + "condition": { + "typeReachable": "org.jline.terminal.TerminalBuilder" + }, + "pattern": "\\QMETA-INF/services/org.jline.terminal.spi.JansiSupport\\E" + }, + { + "condition": { + "typeReachable": "org.jline.terminal.TerminalBuilder" + }, + "pattern": "\\QMETA-INF/services/org.jline.terminal.spi.JnaSupport\\E" + }, + { + "condition": { + "typeReachable": "org.jline.terminal.impl.jansi.JansiNativePty" + }, + "pattern": "\\Qorg/fusesource/jansi/internal/native/Linux/x86_64/libjansi.so\\E" + }, + { + "condition": { + "typeReachable": "org.jline.terminal.impl.jansi.JansiNativePty" + }, + "pattern": "\\QMETA-INF/native/windows64/jansi.dll\\E" + }, + { + "condition": { + "typeReachable": "org.jline.terminal.impl.jansi.JansiNativePty" + }, + "pattern": "\\Qorg/fusesource/jansi/jansi.properties\\E" + }, + { + "condition": { + "typeReachable": "org.jline.terminal.impl.jansi.JansiSupportImpl" + }, + "pattern": "\\Qorg/fusesource/jansi/jansi.properties\\E" + }, + { + "condition": { + "typeReachable": "org.jline.utils.InfoCmp" + }, + "pattern": "\\Qorg/jline/utils/capabilities.txt\\E" + }, + { + "condition": { + "typeReachable": "org.jline.utils.Colors" + }, + "pattern": "\\Qorg/jline/utils/colors.txt\\E" + }, + { + "condition": { + "typeReachable": "org.jline.utils.InfoCmp" + }, + "pattern": "\\Qorg/jline/utils/ansi.caps\\E" + }, + { + "condition": { + "typeReachable": "org.jline.terminal.impl.DumbTerminal" + }, + "pattern": "\\Qorg/jline/utils/dumb.caps\\E" + }, + { + "condition": { + "typeReachable": "org.jline.terminal.impl.DumbTerminal" + }, + "pattern": "\\Qorg/jline/utils/dumb-color.caps\\E" + }, + { + "condition": { + "typeReachable": "org.jline.utils.InfoCmp" + }, + "pattern": "\\Qorg/jline/utils/rxvt.caps\\E" + }, + { + "condition": { + "typeReachable": "org.jline.utils.InfoCmp" + }, + "pattern": "\\Qorg/jline/utils/rxvt-basic.caps\\E" + }, + { + "condition": { + "typeReachable": "org.jline.utils.InfoCmp" + }, + "pattern": "\\Qorg/jline/utils/rxvt-unicode.caps\\E" + }, + { + "condition": { + "typeReachable": "org.jline.utils.InfoCmp" + }, + "pattern": "\\Qorg/jline/utils/rxvt-unicode-256color.caps\\E" + }, + { + "condition": { + "typeReachable": "org.jline.utils.InfoCmp" + }, + "pattern": "\\Qorg/jline/utils/screen.caps\\E" + }, + { + "condition": { + "typeReachable": "org.jline.utils.InfoCmp" + }, + "pattern": "\\Qorg/jline/utils/screen-256color.caps\\E" + }, + { + "condition": { + "typeReachable": "org.jline.terminal.impl.AbstractWindowsTerminal" + }, + "pattern": "\\Qorg/jline/utils/windows.caps\\E" + }, + { + "condition": { + "typeReachable": "org.jline.terminal.impl.AbstractWindowsTerminal" + }, + "pattern": "\\Qorg/jline/utils/windows-256color.caps\\E" + }, + { + "condition": { + "typeReachable": "org.jline.terminal.impl.AbstractWindowsTerminal" + }, + "pattern": "\\Qorg/jline/utils/windows-conemu.caps\\E" + }, + { + "condition": { + "typeReachable": "org.jline.utils.InfoCmp" + }, + "pattern": "\\Qorg/jline/utils/xterm.caps\\E" + }, + { + "condition": { + "typeReachable": "org.jline.utils.InfoCmp" + }, + "pattern": "\\Qorg/jline/utils/xterm-256color.caps\\E" + } + ] + } +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/index.json b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/index.json new file mode 100644 index 00000000000..1967719650a --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/reachability-metadata-repository/org.jline/jline/index.json @@ -0,0 +1,10 @@ +[ + { + "latest": true, + "metadata-version": "3.21.0", + "module": "org.jline:jline", + "tested-versions": [ + "3.21.0" + ] + } +]