我在我的Spring启动项目中添加了Vaadin谷歌地图插件。如果我想在网站上显示地图,那么我会收到错误:
Widgetset' com.vaadin.DefaultWidgetSet'不包含 com.vaadin.tapio.googlemaps.GoogleMap的实施。检查 连接器的@Connect映射,widgetset的GWT模块描述 文件并重新编译您的widgetset。如果您已经下载了 vaadin附加软件包,您可能需要参考添加说明
如果我向UI类添加@Widgetset("com.vaadin.v7.Vaadin7WidgetSet")
注释,那么我会收到此错误:
无法加载widgetset: ./VAADIN/widgetsets/com.vaadin.v7.Vaadin7WidgetSet/com.vaadin.v7.Vaadin7WidgetSet.nocache.js?1521722356809
我有一个问题:widgetset应该如何构建,如何构建它?我一直在寻找示例和教程,但我仍然无法做到这一点。 我在早期的Vaadin版本中看到,我应该做一个手动编译小部件,但在版本8中,编译是自动化的。 也许这是重要的信息,但我使用gradle而不是maven。 请帮助我,因为我试图解决它一个星期。
答案 0 :(得分:0)
只要在Vaadin项目中包含附加组件,就需要编译widgetset,并且widgetset需要包含附加组件集。
我有以下 src / main / resources / widgetsets / AppWidgetset.gwt.xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Vaadin//DTD Vaadin 7//EN" "https://raw.github.com/vaadin/gwt/master/distro-source/core/src/gwt-module.dtd">
<module>
<inherits name="com.vaadin.DefaultWidgetSet"/>
<!-- include widgetsets of external add-ons here -->
<inherits name="org.vaadin.hene.popupbutton.widgetset.PopupbuttonWidgetset"/>
</module>
这包括Vaadin PopupButton插件。当然,您需要调整它以包含您想要的附加组件。我的gradle构建看起来像:
configurations {
vaadinAddOns
widgetSetCompilation
themeCompilation
}
dependencies {
themeCompilation('com.vaadin:vaadin-spring-boot-starter')
}
task compileWidgetSet(type: JavaExec) {
// execution of Vaadin GWT compiler
classpath configurations.vaadinAddOns
classpath configurations.widgetSetCompilation
classpath file("${projectDir}/src/main/resources/widgetsets")
main = 'com.google.gwt.dev.Compiler'
args '-war', "${projectDir}/src/main/resources/VAADIN/widgetsets"
args '-strict'
args '-logLevel', 'WARN'
args 'AppWidgetset'
jvmArgs '-Xmx1024M'
doLast {
// clean up unnecessary stuff
file("${projectDir}/src/main/resources/VAADIN/gwt-unitCache").deleteDir()
file("${projectDir}/src/main/resources/VAADIN/widgetsets/WEB-INF").deleteDir()
}
// for the up-to-date check of gradle
outputs.dir("${projectDir}/src/main/resources/VAADIN/widgetsets/AppWidgetset")
}
clean.dependsOn cleanCompileWidgetSet
processResources.dependsOn compileWidgetSet
// on-the-fly theme compilation is disabled in Vaadin production mode, so we do the compilation ourselves
task compileThemes {
def themesFolder = file("${projectDir}/src/main/resources/VAADIN/themes")
new FileNameFinder().getFileNames(themesFolder.toString(), '**/styles.scss').each { path ->
def themeFolder = file(path).getParentFile()
def fileIn = new File(themeFolder, 'styles.scss')
def fileOut = new File("${buildDir}/resources/main/VAADIN/themes/${themeFolder.getName()}/styles.css")
dependsOn tasks.create("compileTheme${themeFolder.getName().capitalize()}", JavaExec) {
classpath configurations.themeCompilation
main = 'com.vaadin.sass.SassCompiler'
args fileIn, fileOut
inputs.dir(themesFolder)
outputs.file(fileOut)
}
}
}
processResources.dependsOn compileThemes
最后是注释:
@Widgetset("AppWidgetset")
public class MyUI extends UI {
...
}
这是很多手工的东西。如果暂时不在Vaadin生产模式下运行,则可以省略主题编译。我几乎可以肯定有一个Vaadin gradle插件可以简化widgetset和主题编译,但是当我在寻找它时,它不符合我的要求。
Btw:Vaadin 7 widgetset不适合Vaadin 8:)
答案 1 :(得分:0)
我听起来你的项目缺少需要客户端扩展(也称为自定义widgetset)的Vaadin扩展的构建设置。这通常发生在新的Spring用户身上,因为start.spring.io目前不支持添加第三方Maven插件。 Addin vaadin-maven-plugin并进行完整构建应解决问题。
要查看配置了vaadin-maven-plugin的Spring Boot项目,我建议使用viritin-spring-archetype并查看生成的项目(尤其是项目生成的pom.xml)。您也可以手动复制官方普通servlet项目模板中的相关部分(由默认原型或IDE插件生成)。
使用Gradle时,修复本质上是类似的。如果您使用start.spring.io创建项目,则只需将gradle-vaadin-plugin添加到项目中,方法是将以下代码段添加到build.gradle文件中,例如:在buildScript部分之后:
plugins {
id 'com.devsoap.plugin.vaadin' version '1.3.1'
}
您还需要声明与客户端扩展的依赖关系,如下所示(改为使用谷歌地图坐标):
vaadinCompile("org.vaadin.addon:v-leaflet:2.0.6")