Repository: quarkusio/quarkus
Issue: Bootstrap application - fail with 1.3.0.CR1 in native - substitution target for io.quarkus.vertx.core.runtime.graal.Target_sun_nio_ch_Iocp is not loaded

I see fail with simple bootstrap application based on Quarkus 1.3.0.CR1 in native - substitution target for io.quarkus.vertx.core.runtime.graal.Target_sun_nio_ch_Iocp is not loaded

Using GraalVM CE 19.3.1 JDK11 based one.

```
sdk use java 19.3.1.r11-grl && export GRAALVM_HOME=$JAVA_HOME

rm -rf fooBar
mvn io.quarkus:quarkus-maven-plugin:1.3.0.CR1:create \\
    -DprojectGroupId=io.quarkus.qe \\
    -DprojectArtifactId=fooBar \\
    -DprojectVersion=1.0.0-SNAPSHOT \\
    -DplatformArtifactId=quarkus-bom \\
    -DclassName="io.quarkus.qe.MyResource"
mvn -f fooBar/pom.xml clean verify -Dnative
```

```
[INFO] --- quarkus-maven-plugin:1.3.0.CR1:build (default) @ fooBar ---
[INFO] [org.jboss.threads] JBoss Threads version 3.0.1.Final
[INFO] [io.quarkus.deployment.pkg.steps.JarResultBuildStep] Building native image source jar: /Users/rsvoboda/Downloads/fooBar/target/fooBar-1.0.0-SNAPSHOT-native-image-source-jar/fooBar-1.0.0-SNAPSHOT-runner.jar
[INFO] [io.quarkus.deployment.pkg.steps.NativeImageBuildStep] Building native image from /Users/rsvoboda/Downloads/fooBar/target/fooBar-1.0.0-SNAPSHOT-native-image-source-jar/fooBar-1.0.0-SNAPSHOT-runner.jar
[INFO] [io.quarkus.deployment.pkg.steps.NativeImageBuildStep] Running Quarkus native-image plugin on GraalVM Version 19.3.1 CE
[INFO] [io.quarkus.deployment.pkg.steps.NativeImageBuildStep] /Users/rsvoboda/.sdkman/candidates/java/19.3.1.r11-grl/bin/native-image -J-Dsun.nio.ch.maxUpdateArraySize=100 -J-Djava.util.logging.manager=org.jboss.logmanager.LogManager -J-Dvertx.logger-delegate-factory-class-name=io.quarkus.vertx.core.runtime.VertxLogDelegateFactory -J-Dvertx.disableDnsResolver=true -J-Dio.netty.leakDetection.level=DISABLED -J-Dio.netty.allocator.maxOrder=1 --initialize-at-build-time= -H:InitialCollectionPolicy=com.oracle.svm.core.genscavenge.CollectionPolicy$BySpaceAndTime -H:+JNI -jar fooBar-1.0.0-SNAPSHOT-runner.jar -H:FallbackThreshold=0 -H:+ReportExceptionStackTraces -H:-AddAllCharsets -H:-IncludeAllTimeZones -H:EnableURLProtocols=http --no-server -H:-UseServiceLoaderFeature -H:+StackTrace fooBar-1.0.0-SNAPSHOT-runner
[fooBar-1.0.0-SNAPSHOT-runner:7565]    classlist:   3,882.79 ms
[fooBar-1.0.0-SNAPSHOT-runner:7565]        setup:     314.73 ms
Error: substitution target for io.quarkus.vertx.core.runtime.graal.Target_sun_nio_ch_Iocp is not loaded. Use field `onlyWith` in the `TargetClass` annotation to make substitution only active when needed.
com.oracle.svm.core.util.UserError$UserException: substitution target for io.quarkus.vertx.core.runtime.graal.Target_sun_nio_ch_Iocp is not loaded. Use field `onlyWith` in the `TargetClass` annotation to make substitution only active when needed.
	at com.oracle.svm.core.util.UserError.abort(UserError.java:65)
	at com.oracle.svm.hosted.substitute.AnnotationSubstitutionProcessor.findTargetClass(AnnotationSubstitutionProcessor.java:823)
	at com.oracle.svm.hosted.substitute.AnnotationSubstitutionProcessor.handleClass(AnnotationSubstitutionProcessor.java:252)
	at com.oracle.svm.hosted.substitute.AnnotationSubstitutionProcessor.init(AnnotationSubstitutionProcessor.java:230)
	at com.oracle.svm.hosted.NativeImageGenerator.createDeclarativeSubstitutionProcessor(NativeImageGenerator.java:876)
	at com.oracle.svm.hosted.NativeImageGenerator.setupNativeImage(NativeImageGenerator.java:825)
	at com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:528)
	at com.oracle.svm.hosted.NativeImageGenerator.lambda$run$0(NativeImageGenerator.java:445)
	at java.base/java.util.concurrent.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1407)
	at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
	at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
	at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
	at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177)
Error: Image build request failed with exit status 1
```

Changed files:
extensions/vertx-core/runtime/src/main/java/io/quarkus/vertx/core/runtime/graal/JdkSubstitutions.java

diff --git a/extensions/vertx-core/runtime/src/main/java/io/quarkus/vertx/core/runtime/graal/JdkSubstitutions.java b/extensions/vertx-core/runtime/src/main/java/io/quarkus/vertx/core/runtime/graal/JdkSubstitutions.java
index 62fd2e6cb16..bedd8bd8a13 100644
--- a/extensions/vertx-core/runtime/src/main/java/io/quarkus/vertx/core/runtime/graal/JdkSubstitutions.java
+++ b/extensions/vertx-core/runtime/src/main/java/io/quarkus/vertx/core/runtime/graal/JdkSubstitutions.java
@@ -5,6 +5,9 @@
 import java.nio.channels.spi.AsynchronousChannelProvider;
 import java.util.function.Function;
 
+import org.graalvm.nativeimage.Platform;
+import org.graalvm.nativeimage.Platforms;
+
 import com.oracle.svm.core.annotate.Alias;
 import com.oracle.svm.core.annotate.InjectAccessors;
 import com.oracle.svm.core.annotate.Substitute;
@@ -92,6 +95,7 @@ public String apply(TargetClass annotation) {
 
 @Substitute
 @TargetClass(className = "sun.nio.ch.WindowsAsynchronousFileChannelImpl", innerClass = "DefaultIocpHolder", onlyWith = JDK11OrLater.class)
+@Platforms({ Platform.WINDOWS.class })
 final class Target_sun_nio_ch_WindowsAsynchronousFileChannelImpl_DefaultIocpHolder {
 
     @Alias
@@ -100,6 +104,7 @@ final class Target_sun_nio_ch_WindowsAsynchronousFileChannelImpl_DefaultIocpHold
 }
 
 @TargetClass(className = "sun.nio.ch.Iocp", onlyWith = JDK11OrLater.class)
+@Platforms({ Platform.WINDOWS.class })
 final class Target_sun_nio_ch_Iocp {
 
     @Alias
@@ -113,6 +118,7 @@ Target_sun_nio_ch_Iocp start() {
 }
 
 @TargetClass(className = "sun.nio.ch.ThreadPool", onlyWith = JDK11OrLater.class)
+@Platforms({ Platform.WINDOWS.class })
 final class Target_sun_nio_ch_ThreadPool {
 
     @Alias