diff --git a/isthmus-cli/build.gradle.kts b/isthmus-cli/build.gradle.kts index 7a3df32ef..ec1af73a7 100644 --- a/isthmus-cli/build.gradle.kts +++ b/isthmus-cli/build.gradle.kts @@ -56,10 +56,9 @@ graalvmNative { named("main") { imageName.set("isthmus") fallback.set(false) - buildArgs.add("-H:IncludeResources=.*yaml") - buildArgs.add("--report-unsupported-elements-at-runtime") + // Resource inclusion and dynamic-proxy configuration are declared in + // src/main/resources/META-INF/native-image/.../reachability-metadata.json. buildArgs.add("-H:+ReportExceptionStackTraces") - buildArgs.add("-H:DynamicProxyConfigurationFiles=${project.file("proxies.json")}") buildArgs.add("--features=io.substrait.isthmus.cli.RegisterAtRuntime") // Removed due to https://github.com/oracle/graal/issues/13316 // buildArgs.add("--future-defaults=all") @@ -98,7 +97,20 @@ tasks.register("writeIsthmusVersion") { } } -tasks.named("compileJava") { dependsOn("writeIsthmusVersion") } +tasks.named("compileJava") { + dependsOn("writeIsthmusVersion") + // picocli-codegen emits an empty (`[]`) proxy-config.json because isthmus uses class-based + // @Command annotations and needs no JDK dynamic proxies. Its mere presence makes GraalVM emit a + // warning, so delete it after compile. reflect-config.json / resource-config.json (the real + // picocli metadata) are left untouched. + doLast { + destinationDirectory + .file("META-INF/native-image/picocli-generated/proxy-config.json") + .get() + .asFile + .delete() + } +} tasks.named("javadoc") { description = "Generate Javadoc for main source files (excludes generated)." diff --git a/isthmus-cli/proxies.json b/isthmus-cli/proxies.json deleted file mode 100644 index 19838d6c4..000000000 --- a/isthmus-cli/proxies.json +++ /dev/null @@ -1,30 +0,0 @@ -[ - ["org.apache.calcite.rel.metadata.BuiltInMetadata$AllPredicates$Handler"], - ["org.apache.calcite.rel.metadata.BuiltInMetadata$Collation$Handler"], - ["org.apache.calcite.rel.metadata.BuiltInMetadata$ColumnOrigin$Handler"], - ["org.apache.calcite.rel.metadata.BuiltInMetadata$ColumnUniqueness$Handler"], - ["org.apache.calcite.rel.metadata.BuiltInMetadata$CumulativeCost$Handler"], - ["org.apache.calcite.rel.metadata.BuiltInMetadata$DistinctRowCount$Handler"], - ["org.apache.calcite.rel.metadata.BuiltInMetadata$Distribution$Handler"], - ["org.apache.calcite.rel.metadata.BuiltInMetadata$ExplainVisibility$Handler"], - ["org.apache.calcite.rel.metadata.BuiltInMetadata$ExpressionLineage$Handler"], - ["org.apache.calcite.rel.metadata.BuiltInMetadata$FunctionalDependency$Handler"], - ["org.apache.calcite.rel.metadata.BuiltInMetadata$InputFieldsUsed$Handler"], - ["org.apache.calcite.rel.metadata.BuiltInMetadata$LowerBoundCost$Handler"], - ["org.apache.calcite.rel.metadata.BuiltInMetadata$MaxRowCount$Handler"], - ["org.apache.calcite.rel.metadata.BuiltInMetadata$Measure$Handler"], - ["org.apache.calcite.rel.metadata.BuiltInMetadata$Memory$Handler"], - ["org.apache.calcite.rel.metadata.BuiltInMetadata$MinRowCount$Handler"], - ["org.apache.calcite.rel.metadata.BuiltInMetadata$NodeTypes$Handler"], - ["org.apache.calcite.rel.metadata.BuiltInMetadata$NonCumulativeCost$Handler"], - ["org.apache.calcite.rel.metadata.BuiltInMetadata$Parallelism$Handler"], - ["org.apache.calcite.rel.metadata.BuiltInMetadata$PercentageOriginalRows$Handler"], - ["org.apache.calcite.rel.metadata.BuiltInMetadata$PopulationSize$Handler"], - ["org.apache.calcite.rel.metadata.BuiltInMetadata$Predicates$Handler"], - ["org.apache.calcite.rel.metadata.BuiltInMetadata$RowCount$Handler"], - ["org.apache.calcite.rel.metadata.BuiltInMetadata$Selectivity$Handler"], - ["org.apache.calcite.rel.metadata.BuiltInMetadata$Size$Handler"], - ["org.apache.calcite.rel.metadata.BuiltInMetadata$TableReferences$Handler"], - ["org.apache.calcite.rel.metadata.BuiltInMetadata$UniqueKeys$Handler"], - ["org.apache.calcite.runtime.CalciteResource"] -] diff --git a/isthmus-cli/src/main/resources/META-INF/native-image/io.substrait/isthmus-cli/reachability-metadata.json b/isthmus-cli/src/main/resources/META-INF/native-image/io.substrait/isthmus-cli/reachability-metadata.json new file mode 100644 index 000000000..a73d84903 --- /dev/null +++ b/isthmus-cli/src/main/resources/META-INF/native-image/io.substrait/isthmus-cli/reachability-metadata.json @@ -0,0 +1,206 @@ +{ + "comment": "GraalVM reachability metadata for the isthmus native image.", + "resources": [ + { + "glob": "**/*.yaml" + } + ], + "reflection": [ + { + "type": { + "proxy": [ + "org.apache.calcite.rel.metadata.BuiltInMetadata$AllPredicates$Handler" + ] + } + }, + { + "type": { + "proxy": [ + "org.apache.calcite.rel.metadata.BuiltInMetadata$Collation$Handler" + ] + } + }, + { + "type": { + "proxy": [ + "org.apache.calcite.rel.metadata.BuiltInMetadata$ColumnOrigin$Handler" + ] + } + }, + { + "type": { + "proxy": [ + "org.apache.calcite.rel.metadata.BuiltInMetadata$ColumnUniqueness$Handler" + ] + } + }, + { + "type": { + "proxy": [ + "org.apache.calcite.rel.metadata.BuiltInMetadata$CumulativeCost$Handler" + ] + } + }, + { + "type": { + "proxy": [ + "org.apache.calcite.rel.metadata.BuiltInMetadata$DistinctRowCount$Handler" + ] + } + }, + { + "type": { + "proxy": [ + "org.apache.calcite.rel.metadata.BuiltInMetadata$Distribution$Handler" + ] + } + }, + { + "type": { + "proxy": [ + "org.apache.calcite.rel.metadata.BuiltInMetadata$ExplainVisibility$Handler" + ] + } + }, + { + "type": { + "proxy": [ + "org.apache.calcite.rel.metadata.BuiltInMetadata$ExpressionLineage$Handler" + ] + } + }, + { + "type": { + "proxy": [ + "org.apache.calcite.rel.metadata.BuiltInMetadata$FunctionalDependency$Handler" + ] + } + }, + { + "type": { + "proxy": [ + "org.apache.calcite.rel.metadata.BuiltInMetadata$InputFieldsUsed$Handler" + ] + } + }, + { + "type": { + "proxy": [ + "org.apache.calcite.rel.metadata.BuiltInMetadata$LowerBoundCost$Handler" + ] + } + }, + { + "type": { + "proxy": [ + "org.apache.calcite.rel.metadata.BuiltInMetadata$MaxRowCount$Handler" + ] + } + }, + { + "type": { + "proxy": [ + "org.apache.calcite.rel.metadata.BuiltInMetadata$Measure$Handler" + ] + } + }, + { + "type": { + "proxy": [ + "org.apache.calcite.rel.metadata.BuiltInMetadata$Memory$Handler" + ] + } + }, + { + "type": { + "proxy": [ + "org.apache.calcite.rel.metadata.BuiltInMetadata$MinRowCount$Handler" + ] + } + }, + { + "type": { + "proxy": [ + "org.apache.calcite.rel.metadata.BuiltInMetadata$NodeTypes$Handler" + ] + } + }, + { + "type": { + "proxy": [ + "org.apache.calcite.rel.metadata.BuiltInMetadata$NonCumulativeCost$Handler" + ] + } + }, + { + "type": { + "proxy": [ + "org.apache.calcite.rel.metadata.BuiltInMetadata$Parallelism$Handler" + ] + } + }, + { + "type": { + "proxy": [ + "org.apache.calcite.rel.metadata.BuiltInMetadata$PercentageOriginalRows$Handler" + ] + } + }, + { + "type": { + "proxy": [ + "org.apache.calcite.rel.metadata.BuiltInMetadata$PopulationSize$Handler" + ] + } + }, + { + "type": { + "proxy": [ + "org.apache.calcite.rel.metadata.BuiltInMetadata$Predicates$Handler" + ] + } + }, + { + "type": { + "proxy": [ + "org.apache.calcite.rel.metadata.BuiltInMetadata$RowCount$Handler" + ] + } + }, + { + "type": { + "proxy": [ + "org.apache.calcite.rel.metadata.BuiltInMetadata$Selectivity$Handler" + ] + } + }, + { + "type": { + "proxy": [ + "org.apache.calcite.rel.metadata.BuiltInMetadata$Size$Handler" + ] + } + }, + { + "type": { + "proxy": [ + "org.apache.calcite.rel.metadata.BuiltInMetadata$TableReferences$Handler" + ] + } + }, + { + "type": { + "proxy": [ + "org.apache.calcite.rel.metadata.BuiltInMetadata$UniqueKeys$Handler" + ] + } + }, + { + "type": { + "proxy": [ + "org.apache.calcite.runtime.CalciteResource" + ] + } + } + ] +}