Vaadin Flow 是不是支持 Spring-Boot Native
Posted
技术标签:
【中文标题】Vaadin Flow 是不是支持 Spring-Boot Native【英文标题】:Does Vaadin Flow support Spring-Boot NativeVaadin Flow 是否支持 Spring-Boot Native 【发布时间】:2021-06-22 10:19:10 【问题描述】:我目前正在尝试将我的 Spring-Boot/Vaadin V14 应用程序作为本机可执行文件运行。事实证明,通常我可以将 Spring-Boot 服务甚至 Spring-Boot-Data Jpa 应用程序转换为在 Docker 容器内外运行的正在运行的可执行文件。但似乎不可能将最小的 Spring-Boot/Vaadin V14 应用程序转换为本机可执行文件。 复制: 首先确保您已成功安装以下工具:Maven, GraalVM CE Edition (21.1.0) for Java 11, Docker 如果您在代理后面运行,最好在本地安装 NodeJs for NPM 并确保您有足够的 RAM(16 GB 或更高是一个好的开始)。 下一个转到:https://start.spring.io 使用 Java 11、Spring-boot 2.5.1 作为 Jar-File 设置 Maven / Java Spring-boot 应用程序。 添加依赖项:Spring-Native 和 Vaadin。 因此,您可以获得 Spring-Boot 和 Vaadin 的最低项目设置。 接下来,如果您运行 cmd:mvn -v 它应该返回类似: Java 版本:11.0.11,供应商:GraalVM 社区,运行时:graalvm-ce-java11-21.1.0 或更好 确保 Docker 启动并运行,如果您无法直接访问互联网,您应该有适当的代理设置。
正常编译和运行 Vaadin 应用程序由 cmd 完成:mvn -Pproduction clean package 之后,生成的胖 jar 应位于 ./target/'appname'.jar 如果是这样,它可以从:java -jar target/'appname'.jar但它没有开始。它继续原生构建并失败。
用下面的命令行运行同样的:
mvn -Pnative 清洁包
也失败了,有趣的是相同的错误行:未能在项目上执行目标 org.springframework.experimental:spring-aot-maven-plugin:0.10.0:test-generate (test-generate)演示:在 Spring AOT 测试代码生成期间构建失败:错误:在 'com.vaadin.flow.spring.VaadinServletConfiguration' 中,这些方法直接调用标记为 @Bean: [vaadinRootMapping] 的方法 - 由于对 a 中的组件强制执行 proxyBeanMethods=false native-image,请考虑重构以使用实例注入。如果您确信这不会影响您的应用程序,您可以使用 -Dspring.native.verify=false 关闭此检查。 -> [帮助 1]
预期: (像往常一样)长时间编译运行,生成应用程序的二进制文件
我尝试了几种可能的解决方法。例如。将 -Dspring-native.verify=false 添加到命令行,或将“proxyBeanMethods=false”添加到 @SpringBootApplication 注释。但它总是返回错误消息。
查看错误消息,它看起来很清楚,这是 Vaadin 库中的一个实现缺陷。如果有人知道如何解决这个问题,那就太好了。另一种可能的方法是 Vaadin 对此进行一些修复。 但也有可能我走错了路,只是在这里忽略了一些东西。 欢迎任何意见、解决方案或建议 拉尔夫·格里格尔
【问题讨论】:
【参考方案1】:据我所知,Vaadin 不支持使用 GraalVM 进行原生编译。
它最近是在 Quarkus 的上下文中提出的。有一个客户赞助的 Vaadin + Quarkus 示例项目on GitHub。这还不支持原生编译。
还有this GitHub issue 用于官方 Quarkus 支持。它在 Optional parts/Later added 下提到了使用 GraalVM 进行本机编译。
【讨论】:
以上是关于Vaadin Flow 是不是支持 Spring-Boot Native的主要内容,如果未能解决你的问题,请参考以下文章