Vaadin 23 Gradle生产环境构建失败,许可证问题求助
Vaadin 23 SpringBoot Gradle生产构建许可证问题的优化方案
问题回顾
用Gradle构建Vaadin 23 SpringBoot应用生产环境时,执行gradlew build会触发:my_webapp:vaadinBuildFrontend任务失败,报错如下:
FAILURE: Build failed with an exception.
- 出错原因:
任务':my_webapp:vaadinBuildFrontend'执行失败。提供的许可证密钥不允许使用vaadin-board 23.3.5。请检查许可证是否过期,以及您尝试使用的产品是否需要其他类型的订阅。
当前通过手动排除所有商业组件的方式可以解决,但希望找到更简洁的方案,同时确认该问题是否属于Vaadin 23的Bug。
原因分析
这不是Vaadin 23的Bug,而是Gradle与Maven的依赖配置差异导致的:
- Maven的Vaadin SpringBoot Starter默认引入的是
vaadin-core(仅包含开源组件),不会触发商业组件的许可证检查; - 而你当前使用的
libs.vaadin依赖大概率是Vaadin的全量组件包(包含商业组件),生产构建时Vaadin会扫描依赖中的商业组件,进而触发许可证验证。
优化解决方案
1. 直接使用开源专属依赖(最优方案)
替换当前的全量vaadin依赖为vaadin-core,该依赖仅包含Vaadin的开源组件,无需手动排除任何模块:
implementation 'com.vaadin:vaadin-core'
如果使用版本 catalog(libs.versions.toml),可以在文件中添加:
[versions] vaadin = "23.3.5" [libraries] vaadin-core = { group = "com.vaadin", name = "vaadin-core", version.ref = "vaadin" }
然后在build.gradle中引用:
implementation(libs.vaadin-core)
2. 全局批量排除商业组件(保留全量依赖时的备选)
如果因某些原因必须使用全量vaadin依赖,可以通过Gradle的正则匹配批量排除,无需逐个模块声明:
implementation(libs.vaadin) { // 批量匹配并排除所有Vaadin商业组件模块 exclude group: 'com.vaadin', module: /vaadin-(board|charts|cookie-consent|crud|grid-pro|map|rich-text-editor)-flow/ }
总结
优先选择vaadin-core依赖可以从根源上避免商业组件的许可证问题,配置更简洁;如果必须使用全量依赖,正则批量排除是比逐个排除更高效的方式。
内容的提问来源于stack exchange,提问作者K. Taylor
相关产品推荐
相关产品推荐

