I am currently working on Spring Native. I'm trying to make Docker image and run the image in minikube. I ran ./gradlew clean bootBuildImage But it seems like the process has stopped. Only Executing time is changing but nothing else is. Does anyone know what I am missing and how to fix it? It seems there are not many examples and references of Spring Native + Docker Image.
p.s) I am using graalvm64-17.0.4 on MacOS m1 pro
Please see the log from ./gradlew clean bootBuildImage
[creator] Warning: Using a deprecated option --allow-incomplete-classpath from 'META-INF/native-image/org.springframework.aot/spring-aot/native-image.properties' in 'file:///workspace/BOOT-INF/lib/flux-0.0.1-SNAPSHOT-aot.jar'. Allowing an incomplete classpath is now the default. Use --link-at-build-time to report linking errors at image build time for a class or package.
[creator] ================================================================================
[creator] GraalVM Native Image: Generating '/layers/paketo-buildpacks_native-image/native-image/com.klindziuk.nativeflux.NativeFluxApplication' (static executable)...
[creator] ================================================================================
[creator] [1/7] Initializing... (52.0s @ 0.32GB)
[creator] Version info: 'GraalVM 22.2.0 Java 17 CE'
[creator] Java version info: '17.0.4.1+1-LTS'
[creator] C compiler: gcc (linux, x86_64, 7.5.0)
[creator] Garbage collector: Serial GC
[creator] 07:54:51.771 [ForkJoinPool-2-worker-1] DEBUG io.netty.util.internal.logging.InternalLoggerFactory - Using SLF4J as the default logging framework
[creator] 07:54:53.765 [main] DEBUG io.netty.util.ResourceLeakDetector - -Dio.netty.leakDetection.level: simple
[creator] 07:54:53.770 [main] DEBUG io.netty.util.ResourceLeakDetector - -Dio.netty.leakDetection.targetRecords: 4
[creator] 07:54:54.402 [ForkJoinPool-2-worker-5] DEBUG io.netty.util.internal.PlatformDependent0 - -Dio.netty.noUnsafe: false
[creator] 07:54:54.407 [ForkJoinPool-2-worker-5] DEBUG io.netty.util.internal.PlatformDependent0 - Java version: 17
[creator] 07:54:54.426 [ForkJoinPool-2-worker-5] DEBUG io.netty.util.internal.PlatformDependent0 - sun.misc.Unsafe.theUnsafe: available
[creator] 07:54:54.429 [ForkJoinPool-2-worker-5] DEBUG io.netty.util.internal.PlatformDependent0 - sun.misc.Unsafe.copyMemory: available
[creator] 07:54:54.431 [ForkJoinPool-2-worker-5] DEBUG io.netty.util.internal.PlatformDependent0 - java.nio.Buffer.address: available
[creator] 07:54:54.437 [ForkJoinPool-2-worker-5] DEBUG io.netty.util.internal.PlatformDependent0 - direct buffer constructor: available
[creator] 07:54:54.466 [ForkJoinPool-2-worker-5] DEBUG io.netty.util.internal.PlatformDependent0 - java.nio.Bits.unaligned: available, true
[creator] 07:54:54.474 [ForkJoinPool-2-worker-5] DEBUG io.netty.util.internal.PlatformDependent0 - jdk.internal.misc.Unsafe.allocateUninitializedArray(int): available
[creator] 07:54:54.495 [ForkJoinPool-2-worker-5] DEBUG io.netty.util.internal.PlatformDependent0 - java.nio.DirectByteBuffer.<init>(long, int): available
[creator] 07:54:54.496 [ForkJoinPool-2-worker-5] DEBUG io.netty.util.internal.PlatformDependent - sun.misc.Unsafe: available
[creator] 07:54:54.551 [ForkJoinPool-2-worker-5] DEBUG io.netty.util.internal.PlatformDependent - maxDirectMemory: 10040639488 bytes (maybe)
[creator] 07:54:54.553 [ForkJoinPool-2-worker-5] DEBUG io.netty.util.internal.PlatformDependent - -Dio.netty.tmpdir: /tmp (java.io.tmpdir)
[creator] 07:54:54.555 [ForkJoinPool-2-worker-5] DEBUG io.netty.util.internal.PlatformDependent - -Dio.netty.bitMode: 64 (sun.arch.data.model)
[creator] 07:54:54.587 [ForkJoinPool-2-worker-5] DEBUG io.netty.util.internal.PlatformDependent - -Dio.netty.maxDirectMemory: 10040639488 bytes
[creator] 07:54:54.587 [ForkJoinPool-2-worker-5] DEBUG io.netty.util.internal.PlatformDependent - -Dio.netty.uninitializedArrayAllocationThreshold: 1024
[creator] 07:54:54.597 [ForkJoinPool-2-worker-5] DEBUG io.netty.util.internal.CleanerJava9 - java.nio.ByteBuffer.cleaner(): available
[creator] 07:54:54.597 [ForkJoinPool-2-worker-5] DEBUG io.netty.util.internal.PlatformDependent - -Dio.netty.noPreferDirect: false
[creator] 07:55:14.986 [ForkJoinPool-2-worker-4] DEBUG io.netty.handler.ssl.OpenSsl - netty-tcnative not in the classpath; OpenSslEngine will be unavailable.
[creator] 07:55:21.603 [main] DEBUG io.netty.util.NetUtil - -Djava.net.preferIPv4Stack: false
[creator] 07:55:21.609 [main] DEBUG io.netty.util.NetUtil - -Djava.net.preferIPv6Addresses: false
[creator] 07:55:21.613 [main] DEBUG io.netty.util.NetUtilInitializations - Loopback interface: lo (lo, 127.0.0.1)
[creator] 07:55:21.628 [main] DEBUG io.netty.util.NetUtil - /proc/sys/net/core/somaxconn: 4096
[creator] 07:55:21.856 [ForkJoinPool-2-worker-2] DEBUG io.netty.util.internal.InternalThreadLocalMap - -Dio.netty.threadLocalMap.stringBuilder.initialSize: 1024
[creator] 07:55:21.869 [ForkJoinPool-2-worker-2] DEBUG io.netty.util.internal.InternalThreadLocalMap - -Dio.netty.threadLocalMap.stringBuilder.maxSize: 4096
[creator] 07:55:37.410 [ForkJoinPool-2-worker-1] DEBUG io.netty.channel.MultithreadEventLoopGroup - -Dio.netty.eventLoopThreads: 10
[creator] 07:55:37.768 [ForkJoinPool-2-worker-1] DEBUG io.netty.channel.nio.NioEventLoop - -Dio.netty.noKeySetOptimization: false
[creator] 07:55:37.773 [ForkJoinPool-2-worker-1] DEBUG io.netty.channel.nio.NioEventLoop - -Dio.netty.selectorAutoRebuildThreshold: 512
[creator] 07:55:38.318 [ForkJoinPool-2-worker-1] DEBUG io.netty.util.internal.PlatformDependent - org.jctools-core.MpscChunkedArrayQueue: available
[creator] 07:55:49.346 [ForkJoinPool-2-worker-1] DEBUG io.netty.handler.ssl.JdkSslContext - Default protocols (JDK): [TLSv1.3, TLSv1.2]
[creator] 07:55:49.350 [ForkJoinPool-2-worker-1] DEBUG io.netty.handler.ssl.JdkSslContext - Default cipher suites (JDK): [TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_128_GCM_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_AES_128_GCM_SHA256, TLS_AES_256_GCM_SHA384]
[creator] 07:55:51.811 [ForkJoinPool-2-worker-1] DEBUG io.netty.util.internal.NativeLibraryLoader - -Dio.netty.native.workdir: /tmp (io.netty.tmpdir)
[creator] 07:55:51.825 [ForkJoinPool-2-worker-1] DEBUG io.netty.util.internal.NativeLibraryLoader - -Dio.netty.native.deleteLibAfterLoading: true
[creator] 07:55:51.826 [ForkJoinPool-2-worker-1] DEBUG io.netty.util.internal.NativeLibraryLoader - -Dio.netty.native.tryPatchShadedId: true
[creator] 07:55:54.794 [ForkJoinPool-2-worker-2] DEBUG io.netty.buffer.AbstractByteBuf - -Dio.netty.buffer.checkAccessible: true
[creator] 07:55:54.796 [ForkJoinPool-2-worker-2] DEBUG io.netty.buffer.AbstractByteBuf - -Dio.netty.buffer.checkBounds: true
[creator] 07:55:54.798 [ForkJoinPool-2-worker-2] DEBUG io.netty.util.ResourceLeakDetectorFactory - Loaded default ResourceLeakDetector: io.netty.util.ResourceLeakDetector@1e51f8d9
[creator] 07:55:56.070 [ForkJoinPool-2-worker-3] DEBUG io.netty.util.Recycler - -Dio.netty.recycler.maxCapacityPerThread: 4096
[creator] 07:55:56.071 [ForkJoinPool-2-worker-3] DEBUG io.netty.util.Recycler - -Dio.netty.recycler.maxSharedCapacityFactor: 2
[creator] 07:55:56.071 [ForkJoinPool-2-worker-3] DEBUG io.netty.util.Recycler - -Dio.netty.recycler.linkCapacity: 16
[creator] 07:55:56.071 [ForkJoinPool-2-worker-3] DEBUG io.netty.util.Recycler - -Dio.netty.recycler.ratio: 8
[creator] 07:55:56.072 [ForkJoinPool-2-worker-3] DEBUG io.netty.util.Recycler - -Dio.netty.recycler.delayedQueue.ratio: 8
[creator] 07:56:05.577 [ForkJoinPool-2-worker-1] DEBUG io.netty.buffer.AdvancedLeakAwareByteBuf - -Dio.netty.leakDetection.acquireAndReleaseOnly: false
[creator] 07:56:23.755 [ForkJoinPool-2-worker-1] ERROR io.netty.handler.ssl.BouncyCastleAlpnSslUtils - Unable to initialize BouncyCastleAlpnSslUtils.
[creator] java.lang.ClassNotFoundException: org.bouncycastle.jsse.BCSSLEngine
[creator] at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:445)
[creator] at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:587)
[creator] at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
[creator] at java.base/java.lang.Class.forName0(Native Method)
[creator] at java.base/java.lang.Class.forName(Class.java:375)
[creator] at io.netty.handler.ssl.BouncyCastleAlpnSslUtils.<clinit>(BouncyCastleAlpnSslUtils.java:63)
[creator] at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized0(Native Method)
[creator] at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized(Unsafe.java:1155)
[creator] at com.oracle.svm.hosted.classinitialization.ConfigurableClassInitialization.ensureClassInitialized(ConfigurableClassInitialization.java:182)
[creator] at com.oracle.svm.hosted.classinitialization.ConfigurableClassInitialization.computeInitKindAndMaybeInitializeClass(ConfigurableClassInitialization.java:625)
[creator] at com.oracle.svm.hosted.classinitialization.ConfigurableClassInitialization.computeInitKindAndMaybeInitializeClass(ConfigurableClassInitialization.java:135)
[creator] at com.oracle.svm.hosted.classinitialization.ConfigurableClassInitialization.shouldInitializeAtRuntime(ConfigurableClassInitialization.java:163)
[creator] at com.oracle.svm.hosted.SVMHost.isInitialized(SVMHost.java:289)
[creator] at com.oracle.graal.pointsto.meta.AnalysisType.isInitialized(AnalysisType.java:840)
[creator] at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.maybeEagerlyInitialize(BytecodeParser.java:4264)
[creator] at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.genInvokeStatic(BytecodeParser.java:1646)
[creator] at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.genInvokeStatic(BytecodeParser.java:1639)
[creator] at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.processBytecode(BytecodeParser.java:5224)
[creator] at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.iterateBytecodesForBlock(BytecodeParser.java:3359)
[creator] at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.handleBytecodeBlock(BytecodeParser.java:3319)
[creator] at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.processBlock(BytecodeParser.java:3164)
[creator] at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.build(BytecodeParser.java:1138)
[creator] at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.buildRootMethod(BytecodeParser.java:1030)
[creator] at jdk.internal.vm.compiler/org.graalvm.compiler.java.GraphBuilderPhase$Instance.run(GraphBuilderPhase.java:84)
[creator] at com.oracle.svm.hosted.phases.SharedGraphBuilderPhase.run(SharedGraphBuilderPhase.java:79)
[creator] at jdk.internal.vm.compiler/org.graalvm.compiler.phases.Phase.run(Phase.java:49)
[creator] at jdk.internal.vm.compiler/org.graalvm.compiler.phases.BasePhase.apply(BasePhase.java:261)
[creator] at jdk.internal.vm.compiler/org.graalvm.compiler.phases.Phase.apply(Phase.java:42)
[creator] at jdk.internal.vm.compiler/org.graalvm.compiler.phases.Phase.apply(Phase.java:38)
[creator] at com.oracle.graal.pointsto.flow.AnalysisParsedGraph.parseBytecode(AnalysisParsedGraph.java:135)
[creator] at com.oracle.graal.pointsto.meta.AnalysisMethod.ensureGraphParsed(AnalysisMethod.java:685)
[creator] at com.oracle.graal.pointsto.flow.MethodTypeFlowBuilder.parse(MethodTypeFlowBuilder.java:168)
[creator] at com.oracle.graal.pointsto.flow.MethodTypeFlowBuilder.apply(MethodTypeFlowBuilder.java:343)
[creator] at com.oracle.graal.pointsto.flow.MethodTypeFlow.createFlowsGraph(MethodTypeFlow.java:93)
[creator] at com.oracle.graal.pointsto.flow.MethodTypeFlow.ensureFlowsGraphCreated(MethodTypeFlow.java:83)
[creator] at com.oracle.graal.pointsto.flow.MethodTypeFlow.getOrCreateMethodFlowsGraph(MethodTypeFlow.java:65)
[creator] at com.oracle.graal.pointsto.typestate.DefaultVirtualInvokeTypeFlow.onObservedUpdate(DefaultVirtualInvokeTypeFlow.java:109)
[creator] at com.oracle.graal.pointsto.flow.TypeFlow.lambda$addObserver$0(TypeFlow.java:451)
[creator] at com.oracle.graal.pointsto.util.CompletionExecutor.executeCommand(CompletionExecutor.java:193)
[creator] at com.oracle.graal.pointsto.util.CompletionExecutor.lambda$executeService$0(CompletionExecutor.java:177)
[creator] at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1395)
[creator] at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373)
[creator] at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182)
[creator] at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655)
[creator] at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622)
[creator] at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165)
[creator] 07:56:28.322 [main] DEBUG io.netty.util.ResourceLeakDetectorFactory - Loaded default ResourceLeakDetector: io.netty.util.ResourceLeakDetector@2169ad1b
[creator] 07:56:30.411 [ForkJoinPool-2-worker-2] DEBUG io.netty.handler.codec.compression.ZlibCodecFactory - -Dio.netty.noJdkZlibDecoder: false
[creator] 07:56:30.412 [ForkJoinPool-2-worker-2] DEBUG io.netty.handler.codec.compression.ZlibCodecFactory - -Dio.netty.noJdkZlibEncoder: false
<===========--> 91% EXECUTING [31m 26s] ==> Only this time is changing..
This is build.gradle
plugins {
id 'org.springframework.boot' version '2.6.0'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
id 'org.springframework.experimental.aot' version '0.11.0-RC1'
id 'org.graalvm.buildtools.native' version '0.9.4'
}
group = 'com.klindziuk.native'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
maven { url 'https://repo.spring.io/milestone' } // Spring milestones
maven { url 'https://repo.spring.io/snapshot' } // Spring snapshots
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-webflux'
implementation 'org.springframework.boot:spring-boot-starter-data-r2dbc'
implementation 'org.bouncycastle:bcprov-jdk15on:1.70'
implementation 'io.netty:netty-resolver-dns-native-macos:4.1.68.Final:osx-aarch_64'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'io.projectreactor:reactor-test'
runtimeOnly 'com.h2database:h2'
runtimeOnly 'io.r2dbc:r2dbc-h2'
}
test {
useJUnitPlatform()
}
bootBuildImage {
builder = 'paketobuildpacks/builder:tiny'
environment = ['BP_NATIVE_IMAGE': 'true']
imageName = 'klindziuk/flux-native:latest'
}