为了节省编译时间,我试图将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")
答案 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。