我有一个由Quarkus添加到构建时初始化的第三方类,但由于静态线程使用,它需要运行时初始化。将其添加到运行时初始化本机构建时,会抱怨它同时存在于这两个版本中。
重新生成此文件的示例项目:https://github.com/hshorter/quarkus-avro-decode-example
使用“--initialize-at-run-time=org.apache.avro.specific.SpecificDatumReader”:
错误:应该在运行时初始化的类在构建映像时初始化了:org.apache.avro.specific.SpecificDatumReader类被请求在构建时初始化(从命令行)。要了解为什么org.apache.avro.specific.SpecificDatumReader使用-H进行了初始化
如果没有"--初始化-在运行时=org.apache.avro.specific.特定数据读取器":
错误:在映像堆中检测到已启动的线程。映像生成器中运行的线程不再在映像运行时运行。要查看此对象是如何实例化的,请使用-H:traceClassification。该对象可能是由类初始值设定项创建的,可以从静态字段访问。您可以使用选项--initializeatbuildtime=,在映像运行时请求类初始化。或者您可以编写自己的初始化方法,并从主入口点显式调用它们。详细消息:跟踪:对象组织。阿帕奇。阿夫罗。具体的特殊数据读取器
非常感谢您的帮助。
抱歉,我迟到了,但您遇到的问题是,当您要求在运行时初始化 SpecificDatumReader
时,在构建时初始化的另一个类需要 SpecificDatumReader
被初始化。
因此,基本上,您需要做一些检测工作来确定初始化这个类的原因,并可能将初始化该类的类标记为运行时已初始化。
请注意,有时它可能有点毛茸茸的。
我们刚刚解决了这个问题,在生成的代码中有这样一个静态初始值设定项:private static BinaryMessageEncoder=new BinaryMessageEncoder(MODEL$,SCHEMA$);私有静态BinaryMessageDecoder=新的BinaryMessageDecoder(型号$,模式$);
我们修改了Avro代码生成中的Velforce模板:
@io.quarkus.runtime.annotations.RegisterForReflection
注释<plugin>
<groupId>org.apache.avro</groupId>
<artifactId>avro-maven-plugin</artifactId>
<version>${avro.version}</version>
<executions>
<execution>
<id>schemas</id>
<phase>generate-sources</phase>
<goals>
<goal>schema</goal>
</goals>
<configuration>
<templateDirectory>${project.basedir}/src/main/resources/avro/templates/</templateDirectory>
</configuration>
</execution>
</executions>
</plugin>
您可以在 https://github.com/apache/avro/tree/master/lang/java/compiler/src/main/velocity/org/apache/avro/compiler/specific/templates/java/classic 找到基本模板
当我建立一个本土形象时,我面临着一个反思的问题 通用域名格式。神谕svm。主持。代替DeletedElementException:不支持的java字段。朗,同学们。newInstanceCallerCache是可访问的:此元素的声明类已被替换,但替换类中不存在此元素 我该怎么修?我的环境GraalVM 20和Zulu OpenJdk11 我的pom
我尝试使用Quarkus制作一个原生应用程序,但当我构建它时,它冻结了: > 我在Manjaro linux下,用github存储库安装了graalvm。
我正在尝试使用GraalVM构建本机Quarkus映像,但遇到以下构建失败错误: 这是我第一次与GraalVM合作,所以我有点困惑。 以下是基本信息:Java版本17 Graavl VM版本graalvm-ce-javaV-22.1.0 我按照提供的步骤:https://stackoverflow.com/a/65837409/7584240和https://github.com/graalvm/
我想通过Dockerfile部署quarkus builder映像。我们支持一个代理,我将所有linux代理设置都设置为大写和小写。 如果我运行Dockerfile,我会在gu命令中收到一条错误消息,以安装本机映像组件。以下是Dockerfile中的完整运行语句: 它返回一条错误消息,其中包含我必须设置一个http_proxy。在运行语句之前,我启动了一个prencv语句,因为我可以看到http_
初始化类成员的确切时间? 在下面的代码中: B&C类的对象是什么时候创建的?并且它是否保证被创建? 一个专业的app到底该不该用这样的代码?
问题内容: 我想为我编写的(纯粹是学术性的)玩具语言处理器编写一个非常小的概念验证JIT编译器,但是在中等高度的设计中遇到了一些麻烦。从概念上讲,我熟悉JIT的工作原理- 您将字节码编译为(机器或汇编语言)代码以运行。但是,从细节上讲,我不太 了解 您实际如何 执行 此操作。 我(非常“ newb”)下意识的反应,因为我没有从哪里开始的第一个线索,将尝试执行以下操作: mmap()一个内存块,设置