有没有办法触发Maven Appengine Devserver自动刷新静态文件?

时间:2014-01-25 00:57:50

标签: java google-app-engine maven

最新版本的maven插件已经启用了每5秒更新代码,这是一个很大的改进。但除非我配置错误,否则它似乎没有获取静态文件更改,例如正在进行的工作Javascript连接到appengine代码。
有没有办法改变这种行为,或者我只是需要等待新版本?

3 个答案:

答案 0 :(得分:2)

现在只使用附加的devserver无法完成自动更新。严格来说,我们需要等待。

但是您可以通过下面的配置实现无缝html / js / css / etc更新,热门代码替换等的效果。

  1. 配置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/;
      }
    }
    
  2. 使用nginx的this文档,了解更多配置。

    分别配置Eclipse和GAE。

    1. 现在,您可以直接对源进行更改并在刷新时进行更新,包括html(通过nginx)和servlet(通过devserver)。
    2. 将此webapp文件夹添加到您的Chrome开发工具,源工作区,生活将变得更加轻松。可以通过ctrl
    3. 直接将小变化从chrome保存到src

      请注意,虽然这很棒,但您应该在上传之前仅在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之外托管我的开发静态文件。这允许许多优点,包括:

  1. 静态文件更改后自动刷新页面 - 甚至不需要按刷新按钮。
  2. 自动转换高级CSS,例如LESS
  3. 自动转换javascript可编译语言,例如CoffeeScript
  4. 开发完成时缩小和CDN化的机制。
  5. 上述最深刻的含义是,我需要从基于会话的身份验证转移到基于OAuth或OpenID Connect的身份验证系统,并使我的所有Web服务调用CORS兼容。这是一些工作,但它也有一个非常深刻的优势:

    1. 一旦您的Web服务器转移到基于OpenID Connect的身份验证,它现在可以与本机(例如移动)客户端或基于Web的客户端相同地连接!