Vaadin 8 - widgetset

时间:2018-03-26 07:29:09

标签: spring-boot gradle vaadin vaadin8

我在我的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。 请帮助我,因为我试图解决它一个星期。

2 个答案:

答案 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")