如何使用Maven在Vaadin 7中仅编译必要的小部件?

我是Vaadin框架的新手,我看起来非常有趣,使用eclipse和maven来开发和构建我的应用程序我觉得很烦人,每次我做一个mvn干净安装它需要很长时间来构建应用程序,我发现这是因为它编译了整套小部件。

即使我只在我的布局中使用Button,也会在构建应用程序时花费太多。

我已经研究了一段时间在互联网和2本书,但找不到足够的信息,如何使它只编译我正在使用的组件,而不是整套。

我使用maven原型创建了项目:

mvn archetype:generate -DarchetypeGroupId=com.vaadin -DarchetypeArtifactId=vaadin-archetype-application -DarchetypeVersion=7.1.9 

我确信每次构建战争时都会编译widgetset,当我执行mvn clean时会删除目录:/ src / main / webapp / VAADIN / widgetsets和/ src / main / webapp / VAADIN / gwt-unitCache

当我运行mvn install时,构建将持续超过3分钟:

 ... [INFO] Compiling 6 permutations [INFO] Compiling permutation 0... [INFO] Process output [INFO] Compiling [INFO] Compiling permutation 1... [INFO] Process output [INFO] Compiling [INFO] Compiling permutation 3... [INFO] Process output [INFO] Compiling [INFO] Compiling permutation 2... [INFO] Compiling permutation 4... [INFO] Compiling [INFO] Compiling permutation 5... [INFO] Compile of permutations succeeded [INFO] Linking into /.../example/src/main/webapp/VAADIN/widgetsets/com.my.example.AppWidgetSet; Writing extras to /.../example/target/extra/com.my.example.AppWidgetSet [INFO] Link succeeded [INFO] Compilation succeeded -- 167.103s [INFO] [INFO] --- maven-war-plugin:2.2:war (default-war) @ ade --- [INFO] Packaging webapp [INFO] Assembling webapp [example] in [/.../example/target/example-0.1.0-SNAPSHOT] [INFO] Processing war project [INFO] Copying webapp resources [/.../example/src/main/webapp] [INFO] Webapp assembled in [562 msecs] [INFO] Building war: /.../example/target/example-0.1.0-SNAPSHOT.war [INFO] [INFO] --- maven-install-plugin:2.4:install (default-install) @ ade --- [INFO] Installing /.../example/target/example-0.1.0-SNAPSHOT.war to /.../example/0.1.0-SNAPSHOT/example-0.1.0-SNAPSHOT.war [INFO] Installing /.../example/pom.xml to /.../example/0.1.0-SNAPSHOT/example-0.1.0-SNAPSHOT.pom [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 3:03.768s [INFO] Finished at: Fri Jan 10 00:10:45 EST 2014 [INFO] Final Memory: 16M/81M [INFO] ------------------------------------------------------------------------ 

在此之后,再次生成包含以下目录的目录/ src / main / webapp / VAADIN / widgetsets:

 WEB-INF com.my.example.AppWidgetSet 

它还生成/ src / main / webapp / VAADIN / gwt-unitCache

您需要自定义widgetset吗? 如果您没有使用任何小部件插件,并且因为您是Vaadin的新用户,我假设您还没有创建自己的小部件(?),您可以简单地使用Vaadin提供的预编译小部件集。 为此,请从项目中删除任何xxx.gwt.xml文件,并使用com.vaadin.DefaultWidgetset替换web.xml中对它的引用。

web.xml中:

  widgetset com.vaadin.DefaultWidgetSet  

pom.xml中:

  com.vaadin vaadin-client-compiled 7.1.9   

如果你确实需要一个自定义的widgetset(如果你现在不需要,那么你可能需要更进一步),帮自己一个忙,把它放在一个单独的项目中。 根据我的经验,一个widgetset很少变化,所以为什么要将它包含在一个不断变化的项目中。 由Vaadin提供的上述默认widgetset是构建一个的完美蓝图。 只需构建自己的,并从vaadin-client-compiled.jar复制其结构。 你可以使用你最喜欢的maven build helper,我的是程序集。 只需创建一个maven项目,设置pom.xml,添加一个xxx.gwt.xml并确保web.xml包含对它的引用。 我自己的设置看起来像你在下面看到的。

pom.xml中:

  4.0.0 MyWidgetset com.company mywidgetset 1.0-SNAPSHOT  UTF-8 7.1.9 7.1.9     com.vaadin vaadin-client ${vaadin.version} provided   com.vaadin vaadin-client-compiler ${vaadin.version} provided    org.vaadin.addons filteringtable 0.9.3.v7   org.vaadin.addons popupbutton 2.3.0       com.vaadin vaadin-maven-plugin ${vaadin.plugin.version}  -Xmx512M -Xss1024k ${basedir}/target/VAADIN/widgetsets ${basedir}/target/VAADIN/widgetsets false true true true  http://localhost:8080/     resources update-widgetset compile      org.apache.maven.plugins maven-assembly-plugin 2.4  false  src/main/resources/assembly.xml     make-assembly package  single         vaadin-addons http://maven.vaadin.com/vaadin-addons    

assembly.xml:

  build-my-widgetset-jar  jar  false   ${basedir}/target/VAADIN/widgetsets /VAADIN/widgetsets  WEB-INF/     

MyWidgetset.gwt.xml:

        

web.xml中:

   MyWidgetset  MyWidgetset com.vaadin.server.VaadinServlet  ui com.company.mywidgetset.App    widgetset com.company.mywidgetset.MyWidgetset    MyWidgetset /*   

项目结构:

 | pom.xml | \---src +---main | +---java | | \---com | | \---company | | \---mywidgetset | | App.java | | MyWidgetset.gwt.xml | | | +---resources | | assembly.xml | | | \---webapp | \---WEB-INF | web.xml | \---test \---java 

构建它,使用jar作为项目中的依赖项,然后就完成了。 这将永久地让你摆脱GWT称之为“widgetset编译”的巨大痛苦。

要减少widget集的编译时间,可以在.gwt.xml文件之后,取消注释set-property标记。

   

要创建一个新的vaadin-maven项目,您可以尝试使用vaadin 7插件新项目向导,该向导将创建一个带有常春藤依赖关系管理的新项目,创建项目后,右键单击项目并删除常春藤依赖项管理,然后右键单击 – > configure – >将其转换为maven项目将向项目添加maven依赖关系管理。

只是不编译任何小部件,使用默认小部件; 为此,您必须设置以下文件:web.xml:

  widgetset com.vaadin.DefaultWidgetSet  

或者在项目的UI实现中:

 /** * Initial view in Vaadin */ @Theme("valo") @Widgetset("com.vaadin.DefaultWidgetSet") public class MainUI extends UI { 

最后在pom.xml中只包含这些依赖项:

    com.vaadin vaadin-server ${vaadin.version}   com.vaadin vaadin-client-compiled ${vaadin.version}   com.vaadin vaadin-themes ${vaadin.version}   javax.servlet javax.servlet-api 3.0.1  

没有其他的。 我解决了这些,我也希望你。

如果你厌倦了不断编译/重新编译的widgetset,我建议你使用“ CDN Viritin Magic ”

优点:

  1. 没有@Widgetset
  2. 不需要maven-vaadin-plugin
  3. 以N次为单位减少编译时间。

注1(适用于Vaadin Spring Boot用户)
成功的教程演练之后(不要运行mvn clean install !)
您必须在YourAppNameApplication类中再定义一件事:

 @Bean public in.virit.WidgetSet viritinCdnInitializer() { return new in.virit.WidgetSet(); } 

注意2:spring-boot-maven-plugin一起使用是可以的