当前位置: 首页 > 面试题库 >

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

顾斌
2023-03-14
问题内容

我是Vaadin框架的新手,我看起来非常有趣,使用eclipse和maven开发和构建应用程序,我感到非常烦人,每次我执行mvn全新安装都将花费很长时间来构建该应用程序,我发现这是因为它编译了整个小部件集。

即使我仅在布局中使用按钮,构建应用程序也会花费很多。

我已经在Internet和2本书上进行了一段时间的研究,但找不到足够的信息以了解如何仅编译我正在使用的组件而不是整个组件。

我通过使用Maven原型创建了项目:

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

我确定每次构建战争时都会编译小部件集,当我执行mvn清理时,它会删除目录:/ src / main / webapp / VAADIN /
widgetsets和/ src / main / webapp / VAADIN / gwt-unitCache

当我运行mvn时,构建将持续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


问题答案:

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

web.xml:

<init-param>
    <name>widgetset</name>
    <value>com.vaadin.DefaultWidgetSet</value>
</init-param>

pom.xml:

<dependency>
    <groupId>com.vaadin</groupId>
    <artifactId>vaadin-client-compiled</artifactId>
    <version>7.1.9</version>    <!-- or whatever version you're using -->
</dependency>

如果您确实需要自定义的小部件集(并且现在不需要的话,很可能您将需要一个进一步的小工具集),请帮个忙并将其放在单独的项目中。以我的经验,widgetset很少更改,因此为什么要将其包含在不断变化的项目中。Vaadin提供的上述默认小部件集是构建一个小部件的完美蓝图。只需构建自己的文件,然后从vaadin-
client-
compiled.jar复制其结构即可。您可以使用自己喜欢的Maven构建帮助器,即我的装配体。只需创建一个maven项目,设置pom.xml,添加xxx.gwt.xml并确保web.xml包含对该项目的引用。我自己的设置类似于您在下面看到的内容。

pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <name>MyWidgetset</name>
    <groupId>com.company</groupId>
    <artifactId>mywidgetset</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <vaadin.version>7.1.9</vaadin.version>
        <vaadin.plugin.version>7.1.9</vaadin.plugin.version>
    </properties>

    <dependencies>
        <!-- vaadin -->
        <dependency>
            <groupId>com.vaadin</groupId>
            <artifactId>vaadin-client</artifactId>
            <version>${vaadin.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.vaadin</groupId>
            <artifactId>vaadin-client-compiler</artifactId>
            <version>${vaadin.version}</version>
            <scope>provided</scope>
        </dependency>

        <!-- custom widgets (NOTE: addons without a widget do not belong here) -->
        <dependency>
            <groupId>org.vaadin.addons</groupId>
            <artifactId>filteringtable</artifactId>
            <version>0.9.3.v7</version>
        </dependency>
        <dependency>
            <groupId>org.vaadin.addons</groupId>
            <artifactId>popupbutton</artifactId>
            <version>2.3.0</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <!-- vaadin update widgetset -->
            <plugin>
                <groupId>com.vaadin</groupId>
                <artifactId>vaadin-maven-plugin</artifactId>
                <version>${vaadin.plugin.version}</version>

                <configuration>
                    <extraJvmArgs>-Xmx512M -Xss1024k</extraJvmArgs>
                    <webappDirectory>${basedir}/target/VAADIN/widgetsets</webappDirectory>
                    <hostedWebapp>${basedir}/target/VAADIN/widgetsets</hostedWebapp>
                    <force>false</force>
                    <strict>true</strict>
                    <noServer>true</noServer>
                    <compileReport>true</compileReport>
                    <style>OBF</style>
                    <runTarget>http://localhost:8080/</runTarget>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>resources</goal>
                            <goal>update-widgetset</goal>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <appendAssemblyId>false</appendAssemblyId>
                    <descriptors>
                        <descriptor>src/main/resources/assembly.xml</descriptor>
                    </descriptors>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>

    <repositories>
        <repository>
            <id>vaadin-addons</id>
            <url>http://maven.vaadin.com/vaadin-addons</url>
        </repository>
    </repositories>
</project>

assembly.xml:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">

    <id>build-my-widgetset-jar</id>
    <formats>
        <format>jar</format>
    </formats>

    <includeBaseDirectory>false</includeBaseDirectory>

    <fileSets>
        <fileSet>
            <directory>${basedir}/target/VAADIN/widgetsets</directory>
            <outputDirectory>/VAADIN/widgetsets</outputDirectory>
            <excludes>
                <exclude>WEB-INF/</exclude>
            </excludes>
        </fileSet>
    </fileSets>
</assembly>

MyWidgetset.gwt.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC
    "-//Google Inc.//DTD Google Web Toolkit 1.7.0//EN"
    "http://google-web-toolkit.googlecode.com/svn/tags/1.7.0/distro-source/core/src/gwt-module.dtd">
<module>
    <inherits name="com.vaadin.DefaultWidgetSet" />

    <inherits name="org.tepi.filtertable.gwt.FilterTableWidgetset" />

    <inherits name="org.vaadin.hene.popupbutton.widgetset.PopupbuttonWidgetset" />

</module>

web.xml:

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">

    <display-name>MyWidgetset</display-name>

    <servlet>
        <servlet-name>MyWidgetset</servlet-name>
        <servlet-class>com.vaadin.server.VaadinServlet</servlet-class>
        <init-param>
            <param-name>ui</param-name>
            <param-value>com.company.mywidgetset.App</param-value>    <!-- use it for testing the widgetset-->
        </init-param>
        <init-param>
            <param-name>widgetset</param-name>
            <param-value>com.company.mywidgetset.MyWidgetset</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>MyWidgetset</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

项目结构:

|   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编译”的烦恼。



 类似资料:
  • 在我的vadin应用程序中,一个扩展AbstractJavaScriptComponent的自定义小部件有几个文件,如下所示。这些文件在浏览器中可用 null

  • 我正在尝试用我的项目设置mapstruct,我已经习惯了通过简单的jvm代理来完成的lombok,所以我真的不明白如何让mapstruct工作。 这是我的pom: 请注意,在mapstruct进入游戏之前,我不需要整个maven编译插件块:一切都很好。我可以毫无问题地构建springboot胖jar,无需明确指定spring和lombok注释处理。。。那是非常美好的时光。 现在我甚至不确定我是否在

  • 问题内容: 我只想编译源目录中的选定文件或目录(包括子目录)。我非常确定可以使用of 的配置来完成此操作,但是由于它仍将所有类都编译为,因此它似乎并没有达到我的预期。真正奇怪的是,Maven的输出表明该设置实际上已完成其工作,原因是: 我有: 但没有编译器的配置,我有: 但是在这两种情况下,所有14个类都被编译为我提到的那样。您能解释一下还是建议另一种仅编译选定文件的解决方案? 问题答案: 3类简

  • 问题内容: 我只是好奇地知道这一点,当我不进行“清理”就安装mvn时,maven仅编译了修改后的java文件。Maven如何识别Java文件是否被修改?我相信它没有使用文件的最后修改属性。 我相信的原因:我有一个模块,在合并了svn的更改后,我进行了mvn install,但它没有编译修改后的文件,当我查看更改时,我发现其中的’long’被修改为’Long’吸气剂和二传手。 所以我只想知道Mave

  • 在NetBeans 7.2中,我很难找到如何在Maven项目中使用-Xlint:unchecked进行编译。在Ant项目下,可以通过转到项目属性来更改编译器标志- 有没有办法使用Maven将IDE配置为使用此类标志进行编译?

  • 问题内容: 我需要使用已“定制”的特殊JRE批处理编译。 Eclipse可以使用此JRE编译类,但是我需要在Eclipse之外制作一个构建脚本。 Eclipse使用什么方法在没有JDK的情况下生成.class文件? 问题答案: Eclipse具有其自己的编译器,其原因如下: 增量编译(可以仅编译项目的更改部分,这可能意味着比刚刚保存的文件数量更多,例如,当您更改某些全局变量时) 即使代码包含错误,