我试图构建一个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)
有人知道问题出在哪里吗?
经过几个问题和帖子,我最终找到了答案。
若要删除此失败,只需在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