2

コンパイルの時間を節約するために、ウィジェットセットのコンパイルを独自の 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")
4

2 に答える 2

1

OP の更新後に表示される変更は、欠落していたものでした。

Vaadin が最初にリソースを見つけられなかった理由はわかりませんが、「ベース プロジェクト」をディスクから削除して SVN から再取得した後、プロジェクトをクリーンアップし、maven を更新しました。 Tomcat の作業ディレクトリはクリーンで、魔法のように機能しました。キャッシュされたコンテンツがいくつか横たわっていたと思います。これが、Vaadin ウィジェットセットを独自のプロジェクトに分割したいと考えている他の人の助けになることを願っています!

于 2013-08-19T06:43:50.543 に答える