【问题标题】:GWT SuperDevMode fails to see changesGWT SuperDevMode 无法看到更改
【发布时间】:2015-02-10 13:46:22
【问题描述】:

我正在尝试设置我的项目以使用 gwt maven 插件。它编译正确,但我无法使用开发模式或超级开发模式进行开发。

我的设置如下:

Maven 配置顺序

mvn clean install
mvn tomcat7:run-war-only
mvn gwt:run-codeserver

GWT 版本:2.6.1

IDE:Intellij 14 Community Edition

当我对客户端 java 文件进行更改并单击代码服务器页面上的“编译”按钮时,它们不会反映在网页上。我怀疑代码服务器没有查看我正在更改的相同来源。具体来说,我认为它正在寻找要在 target/{project-name}/* 中编译的源代码

以下是我正在使用的 POM 文件的 sn-p。

    <sourceDirectory>src/main/java</sourceDirectory>
    <resources>
        <resource>
            <directory>src/main/java</directory>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
        </resource>
    </resources>



    <outputDirectory>${project.build.directory}/${project.artifactId}-${project.version}/WEB-INF/classes</outputDirectory>
    <plugins>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-checkstyle-plugin</artifactId>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>${maven.compiler.plugin.version}</version>
            <configuration>
                <source>${java.version}</source>
                <target>${java.version}</target>
                <encoding>${project.build.sourceEncoding}</encoding>
                <!--compilerArgument>-proc:none</compilerArgument-->
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <version>2.0</version>
            <configuration>
                <path>${tomcat.context}</path>
                <port>${tomcat.webport}</port>
                <ajpPort>${tomcat.ajpport}</ajpPort>
                <contextReloadable>true</contextReloadable>
            </configuration>
        </plugin>

        <!-- GWT Maven Plugin -->
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>gwt-maven-plugin</artifactId>
            <version>${maven.gwt.plugin.version}</version>
            <executions>
                <execution>
                    <goals>
                        <goal>compile</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <draftCompile>true</draftCompile>
                <hostedWebapp>${webappDirectory}</hostedWebapp>
                <noServer>true</noServer>
                <port>${tomcat.webport}</port>
                <runTarget>${tomcat.context}/index.html</runTarget>
                <!--codeServerWorkDir>${webappDirectory}</codeServerWorkDir-->
                <copyWebapp>true</copyWebapp>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.1.1</version>
            <executions>
                <execution>
                    <phase>compile</phase>
                    <goals>
                        <goal>exploded</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <webappDirectory>${webappDirectory}</webappDirectory>
            </configuration>
        </plugin>



    </plugins>

</build>

任何帮助将不胜感激!

【问题讨论】:

  • 你能显示你的projectname.gwt.xml吗?您的模块 xml 中有以下配置吗?
  • 是的。我有那些台词。现在,我每次都重新运行 gwt:run-codeserver 步骤以反映更改。简单的“编译”只是重新编译旧代码。
  • @ChrisHinshaw devModeRedirectEnabled 在 2.6.1 中不需要(而 xsiframe 是 2.7 BTW 中的默认值)

标签: java maven gwt intellij-idea


【解决方案1】:

尝试了所有可能的论坛的建议和各种 codeServer 启动参数均未成功,我发现触发刷新而不重新启动任何服务器的唯一方法是再次单击书签“Dev Mode Off”,然后单击“Dev Mode On”然后'编译'按钮......代码服务器重新编译更改的java源代码! (开发模式快捷方式是那些您应该从代码服务器主页(如http://localhost:9876)拖到浏览器书签中的快捷方式)。

使用“Google Plugin for Eclipse”(==GPE,2018 年 1 月已弃用)刷新页面就足够了,而且 - 看起来 - 不再使用“GWT Eclipse 插件”(替换 GPE)(欣赏措辞上的细微差别!)

【讨论】:

    【解决方案2】:

    因为您将src/main/java 列为&lt;resource&gt;,所以它的文件被复制到${project.build.outputDirectory},并且该文件在类路径中排在第一位,因为您可以过滤来自&lt;resource&gt; 的文件并拥有&lt;source&gt; 和@987654328 @ intersect (这里就是这种情况)。见http://jira.codehaus.org/browse/MGWT-290

    所以要么:

    • 从项目资源中删除 src/main/java
    • 从项目资源中删除 *.java 文件(这样至少它们不会被复制到输出目录并且不会影响 src/main/java
    • 或每次更改src/main/java 中的文件时运行mvn resources:resources(就像您必须处理src/main/resources 中的文件一样,因为可能会进行过滤);不过,这可以由您的 IDE 或其他一些工具(例如 watchman)自动完成。

    【讨论】:

    • 修改后的POM反映在这个段src/main/java**/*.java排除>
    【解决方案3】:

    我会升级项目以使用 gwt-2.7.0 和 gwt-maven-2.7.0,然后在 servlet 容器中的应用程序中运行 superdev 模式不需要什么特别的,只需运行 mvn gwt:run 并指向您的浏览器到http://localhost:8888,然后每次更改代码时只需在浏览器中点击刷新即可重新编译应用程序。

    如您所见,它非常简单,而且您会提前在 2.7.0 中重新编译快得多。

    【讨论】:

    • 正如你所说,我升级到 2.7.0,当我更改客户端源时,我收到了 [INFO] skipped compile because no input files have changed [INFO] 1.524s total -- Compile completed
    • 是您的客户端软件包中的那些文件,我的意思是在您的 module.gwt.xml 中定义的源补丁中? superdev 模式仅重新编译在您的模块中继承的 gwt src 文件夹中的更改
    • 是的,这些文件在客户端包中。由于某种原因,它们对编译器不可见。如果我手动将编辑后的文件从 src/main/java//client/ 复制到 target//WEB-INF/classes//client/,然后重新加载网页,我可以查看变化
    • 我认为您的 pom 配置不正确,可能是类路径。您可以将您的 pom 与 webAppCreator -templates maven 生成的进行比较吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多