打破Vaadin widgetset编译

时间:2013-08-16 09:55:17

标签: maven maven-3 vaadin vaadin7

为了节省编译时间,我试图将widget集的编译分解为自己的TeamCity构建项目,我们使用nexus作为repo。然后,Vaadin“基础项目”包含对widgetset工件的依赖性以获取当前版本。我确信之前已经完成了。

在TeamCity中构建widgetset项目很好。罐子和poms正确上传到nexus。我已经拆开了罐子以确保一切都在它的位置。到目前为止一切都很好。

在eclipse中,基础项目会获取widgetset工件并将其包含在其库中。看起来不错。

但是,当我在eclipse的基础项目上执行“mvn clean package”并在Tomcat上运行时,我在Web浏览器中收到以下错误:

Failed to load the widgetset: ./VAADIN/widgetsets/com.example.somerandomapp.web.AppWidgetSet/com.example.somerandomapp.web.AppWidgetSet.nocache.js?1376642850734

当我检查项目结构时,我发现目标文件夹下没有VAADIN / widgetset文件夹。另外,在maven依赖jar文件中,有一个包含gwt-unitCache的VAADIN文件夹和一个包含widgetset-goodies的VAADIN.widgetsets文件夹,以及上面提到的错误消息中的文件。

我无法理解这一点。我不是专业人士,所以我可能错过了一些微不足道的东西。我也不是Vaadin职业选手,所以我可能也错过了那些在那里微不足道的东西。

我真的希望有人可以帮我把这艘船放到水里。我将不胜感激!

Vaadin版本:7.1.1 Maven版本:3.0.4

我的基础项目的pom.xml(为了简洁省略了一些东西):

<dependencies>

    <!-- Some Random App - Commons -->
    <dependency>
        <groupId>com.example.somerandomapp.common</groupId>
        <artifactId>somerandomapp-common-widgetset</artifactId>
        <version>0.0.5-SNAPSHOT</version>
    </dependency>

    <!-- Vaadin -->
    <dependency>
        <groupId>com.vaadin</groupId>
        <artifactId>vaadin-server</artifactId>
        <version>${vaadin.version}</version>
    </dependency>
    <dependency>
        <groupId>com.vaadin</groupId>
        <artifactId>vaadin-client-compiled</artifactId>
        <version>${vaadin.version}</version>
    </dependency>
    <dependency>
        <groupId>com.vaadin</groupId>
        <artifactId>vaadin-client</artifactId>
        <version>${vaadin.version}</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>com.vaadin</groupId>
        <artifactId>vaadin-push</artifactId>
        <version>${vaadin.version}</version>
    </dependency>
    <dependency>
        <groupId>com.vaadin</groupId>
        <artifactId>vaadin-themes</artifactId>
        <version>${vaadin.version}</version>
    </dependency>

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>${javax-servlet-api.version}</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>${maven-war-plugin.version}</version>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>
    </plugins>
</build>

我的widgetset-pom(为了简洁省略了一些东西):

<!-- same Vaadin-plugins as in the "base project" -->
<!-- maven compiler, release, javadoc, deploy and source artifacts -->
    <plugin>
        <artifactId>maven-clean-plugin</artifactId>
        <version>${maven-clean-plugin.version}</version>
        <configuration>
            <filesets>
                <fileset>
                    <directory>src/main/webapp/VAADIN/widgetsets</directory>
                </fileset>
            </filesets>
        </configuration>
    </plugin>

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>${maven-jar-plugin.version}</version>
        <configuration>
            <failOnMissingWebXml>false</failOnMissingWebXml>
            <excludes>
                <exclude>VAADIN/widgetsets/WEB-INF/**</exclude>
            </excludes>
        </configuration>
    </plugin>

    <plugin>
        <groupId>com.vaadin</groupId>
        <artifactId>vaadin-maven-plugin</artifactId>
        <version>${vaadin-plugin.version}</version>
        <configuration>
            <extraJvmArgs>-Xmx512M -Xss1024k</extraJvmArgs>
            <!-- <runTarget>mobilemail</runTarget> -->
            <!-- We are doing "inplace" but into subdir VAADIN/widgetsets. This 
                 way compatible with Vaadin eclipse plugin. -->
            <webappDirectory>${project.build.outputDirectory}/VAADIN/widgetsets</webappDirectory>
            <hostedWebapp>${project.build.outputDirectory}/VAADIN/widgetsets</hostedWebapp>
            <noServer>true</noServer>
            <!-- Remove draftCompile when project is ready -->
            <draftCompile>false</draftCompile>
            <compileReport>true</compileReport>
            <style>OBF</style>
            <strict>true</strict>
            <runTarget>http://localhost:8080/</runTarget>
        </configuration>
        <executions>
            <execution>
                <goals>
                   <goal>clean</goal>
                    <goal>resources</goal>
                    <goal>update-theme</goal>
                    <goal>update-widgetset</goal>
                    <goal>compile-theme</goal>
                    <goal>compile</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
</plugins>
<pluginManagement>
    <plugins>    
        <!--This plugin's configuration is used to store Eclipse m2e settings 
            only. It has no influence on the Maven build itself. -->
        <plugin>
            <groupId>org.eclipse.m2e</groupId>
            <artifactId>lifecycle-mapping</artifactId>
            <version>1.0.0</version>
            <configuration>
                <lifecycleMappingMetadata>
                    <pluginExecutions>
                        <pluginExecution>
                            <pluginExecutionFilter>
                                <groupId>com.vaadin</groupId>
                                <artifactId>vaadin-maven-plugin</artifactId>
                                <versionRange>[7.1.1,)</versionRange>
                                <goals>
                                    <goal>update-theme</goal>
                                    <goal>resources</goal>
                                    <goal>compile-theme</goal>
                                    <goal>update-widgetset</goal>
                                </goals>
                            </pluginExecutionFilter>
                            <action>
                                <ignore />
                            </action>
                        </pluginExecution>
                    </pluginExecutions>
                </lifecycleMappingMetadata>
            </configuration>
        </plugin>
    </plugins>
</pluginManagement>
</build>

更新 我已经设置了我的MainUI类:

@WebServlet(value = {"/foo/*", "/VAADIN/*"} , asyncSupported = true)
@VaadinServletConfiguration(productionMode = false, ui = MainUI.class, widgetset = "com.example.somerandomapp.common.widgetset.AppWidgetSet")

我意识到这与它有关,并将其更改为正确的widgetset。但我仍然得到同样的错误:

Failed to load the widgetset: ./VAADIN/widgetsets/com.example.somerandomapp.common.widgetset.AppWidgetSet/com.example.somerandomapp.common.widgetset.AppWidgetSet.nocache.js?1376662202437

现在,此错误显示了类路径中nocache文件的正确路径,这让我非常困惑,因为文件位于lib文件夹中。 我希望这不会让你更加困惑....

更新2: 实际上这是足够的:

@WebServlet(value = "/*", asyncSupported = true)
@VaadinServletConfiguration(productionMode = false, ui = MainUI.class, widgetset = "com.example.somerandomapp.common.widgetset.AppWidgetSet")

2 个答案:

答案 0 :(得分:1)

我更新OP后看到的变化是缺失的。

我不确定为什么Vaadin最初没有找到资源,但是在我从磁盘上擦除“基础项目”并从SVN重新获取之后,做了一个项目清理和maven更新,就像以及Tomcat工作目录清理,它神奇地工作。我猜有一些缓存内容。我希望这可以帮助其他任何想要将Vaadin widgetset分解为自己项目的人!

答案 1 :(得分:0)

请参阅Vaadin wiki(您可以在此处找到pom.xml示例)

  

如果您的项目使用自定义GWT小部件,则需要编译它们   使用GWT编译器。这可以使用Codehaus GWT Maven完成   插件。

你必须使用GWT maven plugin编译widgetset(这个插件有点棘手,因为你必须下载我认为的GWT SDK)

  

如果使用'vaadin-maven-plugin',则widgetset(如果有的话)可以   根据项目依赖性自动更新。这是实现的   使用Maven目标'vaadin:update-widgetset'后跟   'GWT:编译'。在之前运行目标清洁(或gwt:clean)   vaadin:建议使用update-widgetset。