コンパイルの時間を節約するために、ウィジェットセットのコンパイルを独自の TeamCity ビルド プロジェクトに分割しようとしています。nexus をリポジトリとして使用しています。次に、Vaadin の「ベース プロジェクト」には、現在のバージョンを取得するためのウィジェット セット アーティファクトへの依存関係が含まれます。私はこれが以前に行われたと確信しています。
ウィジェットセット プロジェクトは TeamCity で正常にビルドされます。jar と poms が正しく nexus にアップロードされます。すべてが所定の位置にあることを確認するために、瓶を開梱しました。ここまでは順調ですね。
Eclipse では、ベース プロジェクトはウィジェット セット アーティファクトをフェッチし、それをライブラリに含めます。良いようです。
ただし、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-folder がありません。さらに、maven 依存関係の jar ファイルには、gwt-unitCache を含む 1 つの VAADIN フォルダーと、widgetset-goodies を含む 1 つの VAADIN.widgetsets-folder、および上記のエラー メッセージにあるファイルがあります。
私はこれについて頭を悩ませることができません。私は熟練したプロではないので、些細なことを見落としている可能性があります。また、私は 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")
これが何か関係があることに気づき、正しいウィジェットセットに変更しました。しかし、私はまだ同じエラーが発生します:
Failed to load the widgetset: ./VAADIN/widgetsets/com.example.somerandomapp.common.widgetset.AppWidgetSet/com.example.somerandomapp.common.widgetset.AppWidgetSet.nocache.js?1376662202437
現在、このエラーは、クラスパス内の nocache-file への正しいパスを示しています。ファイルが lib フォルダーにあるため、非常に混乱しています。これがあなたをこれ以上混乱させないことを願っています....
更新 2: 実際にはこれで十分です。
@WebServlet(value = "/*", asyncSupported = true)
@VaadinServletConfiguration(productionMode = false, ui = MainUI.class, widgetset = "com.example.somerandomapp.common.widgetset.AppWidgetSet")