具有Maven和Spring Boot的Vaadin自定义组件/小部件 [英] Vaadin Custom Components/Widgets with Maven and Spring Boot

查看:120
本文介绍了具有Maven和Spring Boot的Vaadin自定义组件/小部件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我对vaadin来说还比较陌生,因此从spring boot应用程序和vaadin spring boot插件开始.一切正常,直到我尝试创建自己的组件/小工具为止.

I am relatively new to vaadin and started out with a spring boot application and the vaadin spring boot plugin. Everything worked fine until I got to the point where I tried to create my own components/widgets.

不幸的是,我没有找到任何官方"示例/文档来说明如何在Spring Boot应用程序中设置自定义组件,因此我不得不在网上搜索以了解如何在Maven中设置其他插件进行编译客户端小部件的代码.据我从日志输出中可以看出,这些组件的编译工作正常,但是当我尝试访问网页上的这些组件时,我得到了一个错误:

Unfortunately I didn't find any "official" example/documentation how to set up custom components within a spring boot application so I had to search the web to find out how to set up additional plugin(s) in maven to compile the code for the client side widgets. As far as I can tell from the log output the compilation of these components work, but when I try to access these components on the webpage I get an error:

Widgetset 'com.vaadin.DefaultWidgetSet' does not contain implementation for net.gtidev.test.components.MyComponent. Check its component connector's @Connect mapping, widgetsets GWT module description file and re-compile your widgetset. [...]

这是窗口小部件编译器日志:

Here is the widget compiler log:

[INFO] Using com.vaadin:vaadin-client-compiler version 7.6.4
[ERROR] Mar 22, 2016 10:22:43 AM java.util.prefs.WindowsPreferences <init>
[ERROR] WARNUNG: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5.
[INFO] Compiling module net.gtidev.test.components.TestWidgetset
[INFO]    Computing all possible rebind results for 'com.vaadin.client.metadata.ConnectorBundleLoader'
[INFO]       Rebinding com.vaadin.client.metadata.ConnectorBundleLoader
[INFO]          Invoking generator com.vaadin.server.widgetsetutils.ConnectorBundleLoaderFactory
[INFO]             Populating eager bundle

. . . . . 250 more lines

[INFO]    Computing all possible rebind results for 'com.vaadin.client.ui.dd.VAcceptCriterionFactory'
[INFO]       Rebinding com.vaadin.client.ui.dd.VAcceptCriterionFactory
[INFO]          Invoking generator com.vaadin.server.widgetsetutils.AcceptCriteriaFactoryGenerator
[INFO]             Detecting available criteria ...
[INFO]             creating mapping for com.vaadin.event.dd.acceptcriteria.AcceptAll
[INFO]             creating mapping for com.vaadin.event.dd.acceptcriteria.And
[INFO]             creating mapping for com.vaadin.event.dd.acceptcriteria.ContainsDataFlavor
[INFO]             creating mapping for com.vaadin.event.dd.acceptcriteria.SourceIs
[INFO]             creating mapping for com.vaadin.ui.AbstractSelect.TargetItemIs
[INFO]             creating mapping for com.vaadin.ui.AbstractSelect.AcceptItem
[INFO]             creating mapping for com.vaadin.ui.Table.TableDropCriterion
[INFO]             creating mapping for com.vaadin.ui.Tree.TreeDropCriterion
[INFO]             creating mapping for com.vaadin.event.dd.acceptcriteria.Not
[INFO]             creating mapping for com.vaadin.event.dd.acceptcriteria.Or
[INFO]             creating mapping for com.vaadin.event.dd.acceptcriteria.ServerSideCriterion
[INFO]             creating mapping for com.vaadin.event.dd.acceptcriteria.SourceIsTarget
[INFO]             creating mapping for com.vaadin.event.dd.acceptcriteria.TargetDetailIs
[INFO]             creating mapping for com.vaadin.ui.Tree.TargetInSubtree
[INFO]             Done. (0seconds)
[INFO]    Compiling 1 permutation
[INFO]       Compiling permutation 0...
[INFO]    Compile of permutations succeeded
[INFO]    Compilation succeeded -- 59,217s
[INFO] Linking into C:\projects\misc\vaadin-boot\target\vaadin-boot-0.0.1-SNAPSHOT\net.gtidev.test.components.TestWidgetset
[INFO]    Link succeeded
[INFO]    Linking succeeded -- 0,492s

我用于自定义组件的文件是由vaadin 7项目中的eclipse vaadin插件生成的,而我仅为此目的而创建.当我在eclipse中启动此vaadin 7项目时,组件正常工作.然后,我将这些文件复制到我的spring boot maven项目中,在该项目中不再加载自定义组件.

The files I use for my custom component were generated by the eclipse vaadin addon within a vaadin 7 project which I created only for this purpose. When I started this vaadin 7 project in eclipse the component worked. I then copied these files into my spring boot maven project where the custom component does not get loaded any more.

我知道Spring Boot应用程序的引导机制和布局与经典" webapp略有不同,除其他外,静态资源不是从webapp文件夹而是从classpath:/static文件夹加载的.我认为问题的核心与此事实有关,但我不知道该如何解决.

I know that spring boot applications have a slightly different bootstrap mechanism and layout than "classic" webapps and that amongst other things static resources are not loaded from the webapp-folder but from the classpath:/static folder. I think that the core of the problem has something to do with this fact but I don't know what to do to fix it.

我的插件配置(我尝试使用和不使用注释选项):

My Plugin configuration (I tried with and without the commented options):

<plugin>
  <groupId>com.vaadin</groupId>
  <artifactId>vaadin-maven-plugin</artifactId>
  <version>7.6.4</version>
  <configuration>
    <strict>true</strict>
    <force>true</force>
    <!-- Enable during development to speed compiling. -->
    <!-- <draftCompile>true</draftCompile>
    <style>DETAILED</style> -->
    <!-- End development options -->
    <!--<webappDirectory>src/main/webapp/VAADIN/widgetsets</webappDirectory>-->
    <modules>
      <module>net.gtidev.test.components.TestWidgetset</module>
    </modules>
  </configuration>
  <executions>
    <execution>
      <goals>
        <goal>resources</goal>
        <goal>compile</goal>
      </goals>
    </execution>
  </executions>
</plugin>

我尝试了不同的Maven插件组合和配置.在一个示例中,还提到了一个Google-GWT插件,但是在代码上运行此插件会产生与vaadin插件相同的日志输出:

I tried different maven plugin combinations and configurations. In one example, there was also a Google-GWT Plugin mentioned, but running this plugin on the code produced the same log output as the vaadin plugin:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>gwt-maven-plugin</artifactId>
  <version>2.5.1</version>
  <!--<configuration>-->
  <!--<webappDirectory>src/main/webapp/VAADIN/widgetsets</webappDirectory>-->
  <!--<extraJvmArgs>-Xmx512M -Xss1024k</extraJvmArgs>-->
  <!--<runTarget>clean</runTarget>-->
  <!--<hostedWebapp>${project.build.directory}/${project.build.finalName}</hostedWebapp>-->
  <!--<noServer>true</noServer>-->
  <!--<port>8080</port>-->
  <!--<soycDetailed>false</soycDetailed>-->
  <!--</configuration>-->
  <executions>
    <execution>
      <goals>
        <goal>resources</goal>
        <goal>compile</goal>
      </goals>
    </execution>
  </executions>
</plugin>

推荐答案

要使用自定义客户端扩展,Vaadin加载项,您需要将vaadin-maven-plugin添加到您的项目中.它将扫描您使用的加载项,GWT会为您的项目编译一个包含这些扩展名的新窗口小部件集.

To use custom client side extensions, Vaadin Add-ons, you'll need to add vaadin-maven-plugin to your project. It will scan the add-ons you use and GWT compile a new widgetset for your project that contains those extensions.

如果您使用start.spring.io创建了项目,则默认情况下,maven插件不在您的项目中.例如,使用此 Vaadin + Spring原型或基于servlet的正式原型创建示例项目并将vaadin-maven-plugin相关部分从pom.xml复制到您的项目pom.xml.然后进行完整构建,一切都会按预期进行.

If you created the project with start.spring.io the maven plugin is not in your project by default. Create an example project for example using this Vaadin+Spring archetype or the official servlet based archetype and copy the vaadin-maven-plugin related parts from the pom.xml to your projects pom.xml. Then do a full build and everything should works as expected.

这篇关于具有Maven和Spring Boot的Vaadin自定义组件/小部件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆