GWT 2.7 + GAE 应用程序在部署时寻找代码服务器

Posted

技术标签:

【中文标题】GWT 2.7 + GAE 应用程序在部署时寻找代码服务器【英文标题】:GWT 2.7 + GAE app looks for codeserver when deployed 【发布时间】:2015-01-26 23:45:51 【问题描述】:

为什么 appengine 会尝试使用超级开发模式?

每次我将 GWT 应用程序部署到 appengine 并尝试访问它时,我都会收到白色的加载屏幕,然后在大约 20-30 秒后收到以下消息:

我将 maven 与 gwt-maven-plugin 和 appengine-maven-plugin 一起使用。使用maven-gae-plugin 进行部署会得到相同的结果。

如果我切换回使用 2.6.1 版本的 gwt 和 gwt-maven-plugin 它部署正常,所以它似乎与自动开发模式启动器有关。

我的一些 pom.xml

    <build>
        <outputDirectory>$webappDirectory/WEB-INF/classes</outputDirectory>

        <resources>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
            <resource>
                <directory>src/main/super</directory>
            </resource>
            <resource>
                <directory>$project.build.directory/generated-sources/apt</directory>
            </resource>
            <resource>
                <directory>$project.build.directory/generated-sources/gwt</directory>
            </resource>
        </resources>

        <plugins>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>$maven-compiler-plugin.version</version>
                <configuration>
                    <source>$target.jdk</source>
                    <target>$target.jdk</target>
                    <encoding>$project.build.sourceEncoding</encoding>
                    <proc>none</proc>
                </configuration>
            </plugin>

            <!-- JUnit Testing - skip *.GwtTest cases -->
            <!-- 'mvn test' - runs the Jukito tests -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>$maven-surefire-plugin.version</version>
                <configuration>
                    <includes>
                        <include>**/*Test.java</include>
                    </includes>
                    <excludes>
                        <exclude>**/*GwtTest.java</exclude>
                        <exclude>**/*JUnitTest.java</exclude>
                    </excludes>
                </configuration>
            </plugin>

            <!-- GWT -->
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>gwt-maven-plugin</artifactId>
                <version>$gwt-maven-plugin.version</version>
                <configuration>
                    <strict>true</strict>
                    <testTimeOut>180</testTimeOut>
                    <!-- With multiple tests use GwtTestSuite.java for speed -->
                    <includes>**/*GwtTest.java</includes>
                    <mode>htmlunit</mode>

                    <extraJvmArgs>-Xss1024k -Xmx2048M -XX:MaxPermSize=512M</extraJvmArgs>
                    <logLevel>INFO</logLevel>
                    <style>PRETTY</style>

                    <copyWebapp>true</copyWebapp>
                    <hostedWebapp>$webappDirectory</hostedWebapp>

                    <server>com.google.appengine.tools.development.gwt.AppEngineLauncher</server>
                    <appEngineVersion>$gae.version</appEngineVersion>
                    <appEngineHome>$gae.home</appEngineHome>
                    <extraJvmArgs>-Dappengine.sdk.root=$gae.home</extraJvmArgs>
                    <extraJvmArgs>-Ddatastore.default_high_rep_job_policy_unapplied_job_pct=20</extraJvmArgs>
                    <port>8888</port>

                    <runTarget>Project.html</runTarget>
                    <modules>
                        <module>com.utilitiessavings.usavappv7.Project</module>
                    </modules>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                            <goal>test</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <!-- Google App Engine Deployment -->
            <plugin>
                <groupId>com.google.appengine</groupId>
                <artifactId>appengine-maven-plugin</artifactId>
                <version>$gae.version</version>
                <configuration>
                    <enableJarSplitting>true</enableJarSplitting>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>

        <!-- Google Web Toolkit dependencies -->
        <dependency>
            <groupId>com.google.gwt</groupId>
            <artifactId>gwt-user</artifactId>
            <version>$gwt.version</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.google.gwt</groupId>
            <artifactId>gwt-servlet</artifactId>
            <version>$gwt.version</version>
            <scope>runtime</scope>
        </dependency>

        <!-- Google App Engine dependencies -->
        <dependency>
            <groupId>com.google.appengine</groupId>
            <artifactId>appengine-api-1.0-sdk</artifactId>
            <version>$gae.version</version>
        </dependency>
        <!-- Testing -->
        <dependency>
            <groupId>com.google.appengine</groupId>
            <artifactId>appengine-api-labs</artifactId>
            <version>$gae.version</version>
        </dependency>
        <dependency>
            <groupId>com.google.appengine</groupId>
            <artifactId>appengine-api-stubs</artifactId>
            <version>$gae.version</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.google.appengine</groupId>
            <artifactId>appengine-testing</artifactId>
            <version>$gae.version</version>
            <scope>test</scope>
        </dependency>

        <!-- Persistence dependencies -->
        <dependency>
            <groupId>javax.persistence</groupId>
            <artifactId>persistence-api</artifactId>
            <version>$persistence-api.version</version>
        </dependency>
        <dependency>
            <groupId>com.googlecode.objectify</groupId>
            <artifactId>objectify</artifactId>
            <version>$objectify.version</version>
        </dependency>
        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>$javax.validation.version</version>
        </dependency>

        <!-- Other dependencies -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>$servlet-api.version</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

    </dependencies>

在我的 Project.gwt.xml 中

<add-linker name="xsiframe" />

(尝试删除此行但仍然得到相同的结果)

环境

日食月神(4.4.1)

Maven 3.2.3(3.2.1 嵌入式)

m2eclipse 1.5.0

【问题讨论】:

【参考方案1】:

gwt:compile 尝试通过将 nocache.js 文件的时间戳与源文件的时间戳进行比较来“增量”工作,如果它认为输出是最新的,则跳过 GWT 编译。 这很脆弱gwt:run(没有&lt;superDevMode&gt;false&lt;/superDevMode&gt;;和gwt:run-codeserverlauncherDir)将使用特定于SuperDevMode 的版本覆盖nocache.js,这很可能导致gwt:compile 跳过编译。

要点是:在部署或“释放”时,请确保首先运行mvn clean 通过将-Dgwt.compiler.force 传递给Maven 来强制gwt:compile 运行。

【讨论】:

谢谢,但我总是先运行 'mvn clean',每次尝试都会发生这种情况。 可以是***.com/a/5745870/116472 吗? (但使用 SuperDevMode 生成的 nocache.js 而不是经典的 DevMode,因此行为不同)【参考方案2】:

仅供参考,由于使用了非标准项目结构,我遇到了同样的问题。

Maven 将 .nocache 文件复制到与 /target/ 不同的目录中,这阻止了 clean 插件清理生成的文件。

在复制文件的目录中添加一个新目录可以解决问题。

【讨论】:

以上是关于GWT 2.7 + GAE 应用程序在部署时寻找代码服务器的主要内容,如果未能解决你的问题,请参考以下文章

GWT - GAE 的 RPC 失败 - 在本地工作的问候示例

GWT 应用程序的数据存储位置 - GAE 数据存储或 XML 文件

GWT/GAE - 不包括 .symbolMap 资源文件

GAE 标准 python 2.7 运行时何时消失?

GWT 编辑器和 GAE 数据存储

使用 GWT-TestCase 和 GAE 测试 RPC 调用的示例