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

时间:2014-11-28 10:23:50

标签: google-app-engine maven gwt gwt-maven-plugin gwt-super-dev-mode

为什么appengine尝试使用Super Dev Mode?

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

Couldn't load project from Super Dev Mode server at appspot.com:9876. Please make sure the server is ready. Do you want to try again?

我将maven与gwt-maven-pluginappengine-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" />

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

环境

Eclipse Luna(4.4.1)

Maven 3.2.3(3.2.1 Embedded)

m2eclipse 1.5.0

2 个答案:

答案 0 :(得分:4)

gwt:compile尝试通过将nocache.js文件的时间戳与源文件的时间戳进行比较来“递增”,如果它认为输出是最新的,则跳过GWT编译。 这很脆弱gwt:run(不含<superDevMode>false</superDevMode>; gwt:run-codeserverlauncherDir)将使用SuperDevMode特定版本覆盖nocache.js,这很可能会导致{{1}跳过编译。

需要注意的是:在部署或“释放”时,请确保首先通过将gwt:compile传递给Maven来运行mvn clean 强制gwt:compile

答案 1 :(得分:1)

仅仅是为了获取信息,我遇到了同样的问题,这是由于使用了非标准的项目结构造成的。

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

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