GWT 2.7 + GAE app looks for codeserver when deployed
google-app-engine, gwt, gwt-maven-plugin, gwt-super-dev-mode, maven
Solution
`gwt:compile` tries to work "incrementally" by comparing the timestamp of the nocache.js file with the ones of the source files, and skipping GWT compilation if it thinks the output is up-to-date. This is brittle though. `gwt:run` (without `<superDevMode>false</superDevMode>`; and `gwt:run-codeserver` with `launcherDir`) will overwrite the nocache.js with a SuperDevMode-specific version, and this is likely to lead to `gwt:compile` skipping the compilation.
The takeaway is: when deploying or "releasing", make sure you first run `mvn clean` or force `gwt:compile` to run by passing `-Dgwt.compiler.force` to Maven.
Problem
Why does appengine try to use Super Dev Mode? Every time I deploy my GWT app to appengine and try to access it I get the white loading screen, then after about 20-30 seconds I get this message: I use maven with the gwt-maven-plugin and appengine-maven-plugin. Deploying using the maven-gae-plugin gives the same results. If I switch back to using 2.6.1 versions of gwt and the gwt-maven-plugin it deploys ok, so it would seem it's something to do with the automatic dev mode launcher. Some of my 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> ``` In my Project.gwt.xml ``` <add-linker name="xsiframe" /> ``` (Tried removing this line but still got the same result) Environment Eclipse Luna (4.4.1) Maven 3.2.3 (3.2.1 Embedded) m2eclipse 1.5.0