最新版本的maven插件已经启用了每5秒更新代码,这是一个很大的改进。但除非我配置错误,否则它似乎没有获取静态文件更改,例如正在进行的工作Javascript连接到appengine代码。
有没有办法改变这种行为,或者我只是需要等待新版本?
答案 0 :(得分:2)
现在只使用附加的devserver无法完成自动更新。严格来说,我们需要等待。
但是您可以通过下面的配置实现无缝html / js / css / etc更新,热门代码替换等的效果。
配置Apache httpd或Nginx直接从您的war-source提供静态代码,并路由到servlet的app引擎。在我的例子中,所有的html都可以直接从webapp目录访问,而servlet是通过/ sim /调用的。使用nginx和7070端口,我的工作nginx配置看起来像:
server {
listen 7070;
root /home/pchauhan/Projects/my-company/my-mvn-gae-project/my-mvn-gae-project-war/src/main/webapp;
location /sim/ {
proxy_pass http://localhost:8080/sim/;
}
}
使用nginx的this文档,了解更多配置。
分别配置Eclipse和GAE。
请注意,虽然这很棒,但您应该在上传之前仅在8080(devserver端口)上测试您的应用程序,以防万一配置文件中存在错误并且目标未正确创建/提供。
同步的替代想法:如果由于某种原因您不想使用nginx / httpd,可以将目标... webapp添加到chrome工作区,直接在那里工作以进行无缝更新然后使用lsyncd将目标同步回src。我还没有尝试过,但看起来可行,虽然有点冒险。
答案 1 :(得分:2)
到目前为止,我发现最好的方法是在pom.xml中配置以下条目。这将自动构建您的静态文件并反映在页面上。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<phase>process-classes</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<property name="target.webapp.dir"
value="${project.build.directory}/${project.build.finalName}" />
<property name="src.webapp.dir" value="${basedir}/src/main/webapp" />
<sync verbose="true" todir="${target.webapp.dir}"
includeEmptyDirs="true">
<fileset dir="${src.webapp.dir}" />
<preserveintarget>
<include name="WEB-INF/lib/**" />
<include name="WEB-INF/classes/**" />
<include name="WEB-INF/appengine-generated/**" />
</preserveintarget>
</sync>
<!-- <sync verbose="true" todir="${target.webapp.dir}/WEB-INF/classes">
<fileset dir="${basedir}/target/classes" /> </sync> -->
</target>
</configuration>
</execution>
</executions>
</plugin>
之后的另一个条目
<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>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<versionRange>[1.6,)</versionRange>
<goals>
<goal>run</goal>
</goals>
</pluginExecutionFilter>
<action>
<execute>
<runOnIncremental>true</runOnIncremental>
</execute>
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
这很好用。只要更改并保存了任何静态文件,它就会反映在页面上。
答案 2 :(得分:0)
与PoojaC20一样,我也无法单独使用devserver,但我最终得到了一个不同的解决方法,我认为我会分享,以防其他人发现它有用。
我现在使用grunt-serve在GAE devserver之外托管我的开发静态文件。这允许许多优点,包括:
上述最深刻的含义是,我需要从基于会话的身份验证转移到基于OAuth或OpenID Connect的身份验证系统,并使我的所有Web服务调用CORS兼容。这是一些工作,但它也有一个非常深刻的优势: