diff --git a/core/src/main/java/io/micronaut/core/io/service/ServiceLoaderInitialization.java b/core/src/main/java/io/micronaut/core/io/service/ServiceLoaderInitialization.java index dfe17ac7ca1..cfacaa3d1e8 100644 --- a/core/src/main/java/io/micronaut/core/io/service/ServiceLoaderInitialization.java +++ b/core/src/main/java/io/micronaut/core/io/service/ServiceLoaderInitialization.java @@ -15,6 +15,7 @@ */ package io.micronaut.core.io.service; +import io.micronaut.core.annotation.AnnotationClassValue; import io.micronaut.core.annotation.AnnotationValue; import io.micronaut.core.annotation.NonNull; import io.micronaut.core.beans.BeanInfo; @@ -78,6 +79,8 @@ public void beforeAnalysis(BeforeAnalysisAccess access) { try { beanInfo = (BeanInfo) c.getDeclaredConstructor().newInstance(); } catch (Exception e) { + // not loadable at runtime either, remove it + i.remove(); continue; } Class beanType = beanInfo.getBeanType(); @@ -91,6 +94,12 @@ public void beforeAnalysis(BeforeAnalysisAccess access) { if (value.contains("beans")) { ArrayUtils.concat(classNames, value.stringValues("beans")); } + if (value.contains("condition")) { + Object o = value.getValues().get("condition"); + if (o instanceof AnnotationClassValue annotationClassValue) { + annotationClassValue.getType().ifPresent(RuntimeClassInitialization::initializeAtBuildTime); + } + } for (String className : classNames) { if (access.findClassByName(className) == null) { i.remove(); diff --git a/core/src/main/resources/META-INF/native-image/io.micronaut/micronaut-core/native-image.properties b/core/src/main/resources/META-INF/native-image/io.micronaut/micronaut-core/native-image.properties index e39cc5e7e81..c68083ef94f 100644 --- a/core/src/main/resources/META-INF/native-image/io.micronaut/micronaut-core/native-image.properties +++ b/core/src/main/resources/META-INF/native-image/io.micronaut/micronaut-core/native-image.properties @@ -15,6 +15,7 @@ # Args = --initialize-at-run-time=io.micronaut.core.io.socket.SocketUtils \ + --initialize-at-run-time=io.micronaut.core.type.RuntimeTypeInformation$LazyTypeInfo \ --initialize-at-build-time=io.micronaut.core.io \ --initialize-at-build-time=io.micronaut.core.optim \ --initialize-at-build-time=io.micronaut.core.util \ diff --git a/test-suite-http-server-tck-netty/build.gradle b/test-suite-http-server-tck-netty/build.gradle index d6fce30ff3e..fa58dcfa310 100644 --- a/test-suite-http-server-tck-netty/build.gradle +++ b/test-suite-http-server-tck-netty/build.gradle @@ -42,12 +42,6 @@ tasks.named("test") { useJUnitPlatform() } -def openGraalModules = [ - "org.graalvm.nativeimage.builder/com.oracle.svm.core.jdk", - "org.graalvm.nativeimage.builder/com.oracle.svm.core.configure", - "org.graalvm.sdk/org.graalvm.nativeimage.impl" -] - graalvmNative { toolchainDetection = false metadataRepository { @@ -56,9 +50,6 @@ graalvmNative { binaries { all { resources.autodetect() - openGraalModules.each { module -> - jvmArgs.add("--add-exports=" + module + "=ALL-UNNAMED") - } } } }