爲了節省編譯時間,我試圖將widgetset的編譯分解到它自己的TeamCity構建項目,我們使用nexus作爲回購。然後,Vaadin「基礎項目」將包含對組件工件的依賴關係,以獲取當前版本。我確信這是以前完成的。分解Vaadin的widgetset編譯
在TeamCity中構建的widgetset項目很好。罐子和poms被正確地上傳到nexus。我已經打開罐子,以確保一切都在其位置。到現在爲止還挺好。
在eclipse中,基礎項目確實獲取widgetset工件並將其包含在其庫中。看起來不錯。
然而,當我從月食基地項目「MVN清潔包」,並運行在Tomcat上,我得到的Web瀏覽器以下錯誤:
Failed to load the widgetset: ./VAADIN/widgetsets/com.example.somerandomapp.web.AppWidgetSet/com.example.somerandomapp.web.AppWidgetSet.nocache.js?1376642850734
當我檢查項目結構,我在目標文件夾下找不到VAADIN/widgetset-folder。另外,在Maven依賴關係jar文件中,有一個包含gwt-unitCache的VAADIN文件夾和一個包含widgetset-goodies的VAADIN.widgetsets文件夾,以及上述錯誤消息中提到的文件。
我無法理解這一點。我不是maven專業人士,所以我可能錯過了一些微不足道的東西。此外,我不是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>
我的視窗元件,聚甲醛(離開了爲簡潔一些東西):
<!-- 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")
我意識到這有什麼用它做它改爲正確的視窗元件。但我仍然得到同樣的錯誤:
Failed to load the widgetset: ./VAADIN/widgetsets/com.example.somerandomapp.common.widgetset.AppWidgetSet/com.example.somerandomapp.common.widgetset.AppWidgetSet.nocache.js?1376662202437
現在,這種錯誤顯示了正確的路徑,以在classpath中,這讓我很困惑的非緩存文件,因爲文件是存在的,lib文件夾中。 我希望這沒有進一步迷惑你....
更新2: 其實這是充足的:
@WebServlet(value = "/*", asyncSupported = true)
@VaadinServletConfiguration(productionMode = false, ui = MainUI.class, widgetset = "com.example.somerandomapp.common.widgetset.AppWidgetSet")
我不完全確定這是需要使用Vaadin 7.1.1。我見過的所有例子都是使用vaadin-maven插件。你連接的例子都來自Vaadin 6,當時GWT並不是Vaadin的核心組件。 再次,一切都編譯得很好。問題在於Vaadin無法在庫中找到該組件集。 – Roger
嗯,我認爲從GWT的角度來看6和7之間沒有太大的區別。窗口小部件的使用方式相同。如果你想使用你自己的widgetset,你需要用GWT進行編譯,我想沒有其他辦法。 –
我的目標是不使用「我自己的」組件集。我甚至沒有使用任何小部件/插件/插件。事實上,它的構件集和構建過程與第一次創建項目時的構造過程非常相似。我正在尋找的是將我的主項目中的widgetset分解爲它自己的項目,這樣我就可以在單獨的構建過程中運行widgetset。對於Vaadin,在這種情況下,無論您在哪裏編譯它,它都是相同的組件集,不是嗎?也許我誤解了你想告訴我的東西。在這種情況下,我很抱歉! – Roger