当前位置: 首页 > 知识库问答 >
问题:

Micronaut:使用领事依赖项构建本地映像不起作用

羊慈
2023-03-14

我试图构建一个micronaut(V1.0.4)应用程序的本机映像。

此应用程序使用Consul作为服务发现。

我使用--features选项创建了应用程序:

$ mn create-app my-app --features discovery-consul --features graal-native-image --build maven
$ ./docker-build.sh 
error: No instances are allowed in the image heap for a class that is initialized or reinitialized at image runtime: 
sun.security.provider.NativePRNG
Detailed message:
Error: No instances are allowed in the image heap for a class that is initialized or reinitialized at image runtime: sun.security.provider.NativePRNG
Trace:  object java.security.SecureRandom
    method com.sun.jndi.dns.DnsClient.query(DnsName, int, int, boolean, boolean)
Call path from entry point to com.sun.jndi.dns.DnsClient.query(DnsName, int, int, boolean, boolean): 
    at com.sun.jndi.dns.DnsClient.query(DnsClient.java:178)
    at com.sun.jndi.dns.Resolver.query(Resolver.java:81)
    at com.sun.jndi.dns.DnsContext.c_getAttributes(DnsContext.java:434)
    at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_getAttributes(ComponentDirContext.java:235)
    at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.getAttributes(PartialCompositeDirContext.java:141)
    at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.getAttributes(PartialCompositeDirContext.java:129)
    at javax.naming.directory.InitialDirContext.getAttributes(InitialDirContext.java:142)
    at io.micronaut.discovery.client.DnsResolver.getCNamesFromTxtRecord(DnsResolver.java:59)
    at io.micronaut.discovery.client.EndpointUtil.getEC2DiscoveryUrlsFromZone(EndpointUtil.java:197)
    at io.micronaut.discovery.client.EndpointUtil.getServiceUrlsFromDNS(EndpointUtil.java:141)

有人知道问题出在哪里吗?

共有1个答案

胡向阳
2023-03-14

经过几个问题和帖子,我最终找到了答案。

若要删除此失败,只需在dockerfile中创建本机映像时,将此类com.sun.jndi.dns.dnsclient添加到选项--delay-class-initialization-to-runtime下的类列表中:

Dockerfile

RUN native-image --no-server \
                 ...
                 --delay-class-initialization-to-runtime=...,com.sun.jndi.dns.DnsClient \
                 -H:-UseServiceLoaderFeature \
                 --allow-incomplete-classpath \
                 -H:Name=model-quotes \
                 -H:Class=model.quotes.Application
...
 类似资料:
  • 我有以下文件夹结构: 这里,我的是: 当我运行时,我希望有两个输出图像,一个用于,一个用于。 我使用(仅与版本2的语法兼容)。

  • 在运行本机映像包装的micronaut应用程序时遇到问题。 我使用创建了一个简单的演示应用程序,并且根据文档需要添加一些db连接池。我选择了hikari并添加了这样的依赖项。 我使用maven作为构建工具并添加插件来构建native-image 当我用jvm运行应用程序时,一切正常。但是当我尝试运行打包为本机映像的应用程序时,我会遇到这样的错误 更新/解决方案 基于@airy答案,我在native

  • 正如标题所示,我试图使用Docker为一个基于Kotlin的Micronaut应用程序构建一个本机映像。 我已将以下依赖项添加到文件中。 一切似乎都井然有序。映像启动并似乎接受连接,但当我启动http请求时,会出现以下错误。 有没有关于如何避免上述错误的线索?

  • 我在这里将Micronaut应用程序作为Graalvm本地映像进行试用。

  • 在我的另一个工作区,对于我现有的项目,我没有这个问题。 有办法解决吗?

  • 我有一个库项目,我用它来为我的其他项目保存一些设置,这些项目有很多实用程序分类,也包括实用程序库。因此,我将库的build.gradle中的所有“实现”调用都改为“API”调用,这样我就不需要一次又一次地重新导入依赖项。在构建库并将jar从我的library文件夹移动到主项目中的lib文件夹后,我可以访问库中的所有类,但是传递依赖项在主项目中不可用。 我还尝试使用实现和transivive=tru