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
(没有<superDevMode>false</superDevMode>
;和gwt:run-codeserver
和launcherDir
)将使用特定于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 失败 - 在本地工作的问候示例