1.8. 已知问题
查看以下已知问题,深入了解红帽构建的 Quarkus 3.8 限制和临时解决方案。
1.8.1. Strimzi OAuth 客户端更新到 0.14.0 的原生构建失败
因为将 io.strimzi:strimzi-kafka-oauth
依赖项更新到 0.14.0,导致 Strimzi OAuth 客户端遇到一个已知问题,从而导致 没有加载 io.smallrye.reactive.kafka.graal.Target_com_jayway_jsonpath_DefaultsImpl 指示的原生构建失败。
临时解决方案: 要解决这个问题,请在 classpath 中包含 io.strimzi:kafka-oauth-common
依赖项。
1.8.2. 在 AArch64 上缺少 Kafka Streams 扩展的原生库
由于没有原生库 librocksdbjni-linux-AArch64.so
,使用 quarkus-kafka-streams
扩展的应用程序在 AArch64 系统上具有运行时失败。这个问题会抛出 java.lang.RuntimeException: librocksdbjni-linux-AArch64.so,在应用程序启动过程中没有找到 JAR
错误。此错误可防止成功初始化 RocksDB 组件,这对 Kafka Streams 应用程序至关重要。
临时解决方案:目前还没有可用的临时解决方案。
java.lang.RuntimeException 示例: librocksdbjni-linux-AArch64.so
错误
09:32:54,059 INFO [app] ERROR: Failed to start application (with profile [prod]) 09:32:54,059 INFO [app] java.lang.RuntimeException: Failed to start quarkus 09:32:54,060 INFO [app] at io.quarkus.runner.ApplicationImpl.doStart(Unknown Source) 09:32:54,060 INFO [app] at io.quarkus.runtime.Application.start(Application.java:101) 09:32:54,060 INFO [app] at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:111) 09:32:54,061 INFO [app] at io.quarkus.runtime.Quarkus.run(Quarkus.java:71) 09:32:54,061 INFO [app] at io.quarkus.runtime.Quarkus.run(Quarkus.java:44) 09:32:54,061 INFO [app] at io.quarkus.runtime.Quarkus.run(Quarkus.java:124) 09:32:54,062 INFO [app] at io.quarkus.runner.GeneratedMain.main(Unknown Source) 09:32:54,062 INFO [app] Caused by: java.lang.ExceptionInInitializerError 09:32:54,063 INFO [app] at io.quarkus.kafka.streams.runtime.KafkaStreamsRecorder.loadRocksDb(KafkaStreamsRecorder.java:14) 09:32:54,063 INFO [app] at io.quarkus.deployment.steps.KafkaStreamsProcessor$loadRocksDb1611413226.deploy_0(Unknown Source) 09:32:54,063 INFO [app] at io.quarkus.deployment.steps.KafkaStreamsProcessor$loadRocksDb1611413226.deploy(Unknown Source) 09:32:54,064 INFO [app] ... 7 more 09:32:54,064 INFO [app] Caused by: java.lang.RuntimeException: librocksdbjni-linux-AArch64.so was not found inside JAR. 09:32:54,065 INFO [app] at org.rocksdb.NativeLibraryLoader.loadLibraryFromJarToTemp(NativeLibraryLoader.java:118) 09:32:54,065 INFO [app] at org.rocksdb.NativeLibraryLoader.loadLibraryFromJar(NativeLibraryLoader.java:102) 09:32:54,065 INFO [app] at org.rocksdb.NativeLibraryLoader.loadLibrary(NativeLibraryLoader.java:82) 09:32:54,066 INFO [app] at org.rocksdb.RocksDB.loadLibrary(RocksDB.java:70) 09:32:54,066 INFO [app] at org.rocksdb.RocksDB.<clinit>(RocksDB.java:39) 09:32:54,067 INFO [app] ... 10 more
1.8.3. Microsoft Windows 上 Kafka Streams 扩展缺少原生库
在 Microsoft Windows 上使用 quarkus-kafka-streams
扩展的应用程序会因为没有原生库 librocksdbjni-win64.dll
而有运行时失败。这个问题会在应用程序启动过程中 没有找到 java.lang.RuntimeException: librocksdbjni-win64.dll in JAR
错误。
此错误可防止成功初始化 RocksDB 组件,这对 Kafka Streams 应用程序至关重要。
临时解决方案:目前还没有可用的临时解决方案。
java.lang.RuntimeException: librocksdbjni-win64.dll
错误
13:07:08,118 INFO [app] ERROR: Failed to start application (with profile [prod]) 13:07:08,118 INFO [app] java.lang.RuntimeException: Failed to start quarkus 13:07:08,118 INFO [app] at io.quarkus.runner.ApplicationImpl.doStart(Unknown Source) 13:07:08,118 INFO [app] at io.quarkus.runtime.Application.start(Application.java:101) 13:07:08,118 INFO [app] at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:111) 13:07:08,118 INFO [app] at io.quarkus.runtime.Quarkus.run(Quarkus.java:71) 13:07:08,118 INFO [app] at io.quarkus.runtime.Quarkus.run(Quarkus.java:44) 13:07:08,118 INFO [app] at io.quarkus.runtime.Quarkus.run(Quarkus.java:124) 13:07:08,118 INFO [app] at io.quarkus.runner.GeneratedMain.main(Unknown Source) 13:07:08,118 INFO [app] Caused by: java.lang.ExceptionInInitializerError 13:07:08,118 INFO [app] at io.quarkus.kafka.streams.runtime.KafkaStreamsRecorder.loadRocksDb(KafkaStreamsRecorder.java:14) 13:07:08,118 INFO [app] at io.quarkus.deployment.steps.KafkaStreamsProcessor$loadRocksDb1611413226.deploy_0(Unknown Source) 13:07:08,118 INFO [app] at io.quarkus.deployment.steps.KafkaStreamsProcessor$loadRocksDb1611413226.deploy(Unknown Source) 13:07:08,118 INFO [app] ... 11 more 13:07:08,118 INFO [app] Caused by: java.lang.RuntimeException: librocksdbjni-win64.dll was not found inside JAR. 13:07:08,118 INFO [app] at org.rocksdb.NativeLibraryLoader.loadLibraryFromJarToTemp(NativeLibraryLoader.java:118) 13:07:08,118 INFO [app] at org.rocksdb.NativeLibraryLoader.loadLibraryFromJar(NativeLibraryLoader.java:102) 13:07:08,118 INFO [app] at org.rocksdb.NativeLibraryLoader.loadLibrary(NativeLibraryLoader.java:82) 13:07:08,118 INFO [app] at org.rocksdb.RocksDB.loadLibrary(RocksDB.java:70) 13:07:08,118 INFO [app] at org.rocksdb.RocksDB.<clinit>(RocksDB.java:39) 13:07:08,118 INFO [app] ... 14 more
1.8.4. 明确说明原生构建期间缺少 Vert.x 类
在原生构建期间,开发人员可能会获取 Vert.x 类的 java.lang.ClassNotFoundException
错误,如 io.vertx.core.http.impl.Http1xServerResponse
和 io.vertx.core.parsetools.impl.RecordParserImpl
。这些错误在构建应用程序时发生,包括使用 quarkus-qpid-jms
扩展的应用程序,而无需包括 Vert.x 作为直接或传输的依赖项。
阐明 quarkus-qpid-jms
不直接使用 Vert.x 非常重要。这个问题来自 quarkus-netty
扩展,quarkus-qpid-jms
使用它。quarkus-netty
扩展负责在原生构建期间为运行时初始化注册这些 Vert.x 类,而无需验证其存在。当构建中没有引入 Vert.x 的扩展时,这会导致注意的例外。
这些 ClassNotFoundException
错误会在构建过程中记录,但不影响应用程序的功能。它们是原生构建过程的结果,以及依赖项在红帽构建的 Quarkus 中处理的方式,特别是通过 quarkus-netty
模块。
java.lang.ClassNotFoundException
错误示例
java.lang.ClassNotFoundException: io.vertx.core.http.impl.Http1xServerResponse at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageClassLoader.loadClass(NativeImageClassLoader.java:652) ... (further stack trace details) java.lang.ClassNotFoundException: io.vertx.core.parsetools.impl.RecordParserImpl at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageClassLoader.loadClass(NativeImageClassLoader.java:652) ... (further stack trace details)
临时解决方案:要防止这些日志条目并确保正确识别所有依赖项,您可以选择将 quarkus-vertx
扩展添加到项目中。
1.8.5. 在 OpenShift 上测试 JVM 模式中的 AArch64 支持限制
从 Red Hat build of Quarkus 3.2 开始,在带有 AArch64 的 Red Hat OpenShift Container Platform 上进行 JVM 的测试管道会有一些已知的限制:
- AArch64 不支持 Red Hat Serverless。在 AArch64 架构上运行的 OpenShift 集群上支持 Red Hat Serverless 的功能请求在 SRVCOM-2472 中进行跟踪,计划在 Serverless 1.33 中包含支持。
- AArch64 不支持 Red Hat AMQ Streams。因为 AArch64 上还不支持 AMQ Streams,所以此集成的支持还没有被测试。这个问题目前没有在红帽问题管理系统中跟踪。
- AArch64 不支持 Red Hat Single Sign-On。因为 Red Hat Single Sign-On 和 Red Hat build of Keycloak 尚不在 AArch64 上被支持,所以与 Red Hat build of Quarkus 应用程序的集成还没有被测试。
- AArch64 不支持服务绑定。因为 AArch64 还不支持与 Red Hat build of Quarkus 进行服务绑定集成的绑定服务,所以还没有测试此集成。另外,OpenShift Service Binding Operator 在 OpenShift Container Platform (OCP) 4.13 及更高版本中已弃用,计划在以后的 OCP 发行版本中删除。
AArch64 支持仅限于 Red Hat Universal Base Image (UBI)容器,且不会扩展到裸机环境。
临时解决方案:目前还没有可用的临时解决方案。
1.8.6. 对 org.apache.maven:maven:pom:3.6.3 的依赖项可能会导致代理问题
在使用某些 Quarkus 扩展时,可能会解决对 org.apache.maven:maven:pom:3.6.3
的依赖。这不适用于 Gradle 插件,但会影响到任何具有 io.smallrye:smallrye-parent:pom:37
的项目,在其父项目对象模型(POM)层次结构中。对于代理后面的环境,这个依赖关系可能会导致构建失败,以限制对版本 3.6.x 的 org.apache.maven
工件的访问。Maven 3.6.3 中的二进制软件包都作为 Quarkus 核心框架或支持的 Quarkus 扩展的依赖项下载。
临时解决方案:目前还没有可用的临时解决方案。
如需更多信息,请参阅 QUARKUS-1025 - Gradle 插件在 maven core 3.6.x 中拖动。