每次更改源文件(GWT)时都会调用Maven Project Builder

时间:2011-12-19 17:11:45

标签: eclipse gwt maven m2eclipse

最近我将我的GWT网络应用程序( GWT 2.4.0 )转换为maven项目。
我正在使用maven 2.2.1,gwt-maven plugin(2.4.0),Eclipse Indigo(3.7)和m2eclipse插件。

依赖关系和一般配置似乎很好,因为web-app编译时没有任何问题,也适用于生产模式。
这同样适用于托管模式。

但是我有一个奇怪的行为:当我在Java / GWT源文件中更改单行时,调用Maven Project Builder并且此步骤需要很长时间(大约10秒),并且eclipse有时会变得无法使用时间。

这是m2eclipse的正常行为吗?

如果是,有什么方法可以加快速度吗?

注意:我必须为m2eclipse配置生命周期插件。这是pom文件的重要部分:

<build>
        <!-- Generate compiled stuff in the folder used for developing mode -->
        <outputDirectory>${webappDirectory}/WEB-INF/classes</outputDirectory>

        <plugins>

            <!-- GWT Maven Plugin -->
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>gwt-maven-plugin</artifactId>
                <version>2.4.0</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                            <goal>test</goal>
                        </goals>
                    </execution>
                </executions>
                <!-- Plugin configuration. There are many available options, see gwt-maven-plugin 
                    documentation at codehaus.org -->
                <configuration>
                    <runTarget>index.html</runTarget>
                    <hostedWebapp>${webappDirectory}</hostedWebapp>
                    <i18nMessagesBundle>com.gmi.nordborglab.testapp.client.Messages</i18nMessagesBundle>
                </configuration>
            </plugin>

            <!-- Copy static web files before executing gwt:run -->
            <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>

        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.eclipse.m2e</groupId>
                    <artifactId>lifecycle-mapping</artifactId>
                    <version>1.0.0</version>
                    <configuration>
                        <lifecycleMappingMetadata>
                            <pluginExecutions>
                                <pluginExecution>
                                    <pluginExecutionFilter>
                                        <groupId>org.codehaus.mojo</groupId>
                                        <artifactId>gwt-maven-plugin</artifactId>
                                        <versionRange>[2.4.0,)</versionRange>
                                        <goals>
                                            <goal>resources</goal>
                                            <goal>compile</goal>
                                        </goals>
                                    </pluginExecutionFilter>
                                    <action>
                                        <execute />
                                    </action>
                                </pluginExecution>
                                <pluginExecution>
                                    <pluginExecutionFilter>
                                        <groupId>org.apache.maven.plugins</groupId>
                                        <artifactId>maven-war-plugin</artifactId>
                                        <versionRange>[2.1.1,)</versionRange>
                                        <goals>
                                            <goal>exploded</goal>
                                        </goals>
                                    </pluginExecutionFilter>
                                    <action>
                                        <execute />
                                    </action>
                                </pluginExecution>

                            </pluginExecutions>
                        </lifecycleMappingMetadata>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>

    </build>

3 个答案:

答案 0 :(得分:14)

这完美地说明了为什么m2e默认情况下不允许任何“未知”插件在增量构建上运行(http://wiki.eclipse.org/M2E_plugin_execution_not_covered#Background)。大多数maven插件不适合增量构建,并且无论何时调用它们都会进行完整构建(作为奖励,您可能会遇到类加载器泄漏)。

在插件管理部分,您指定应执行gwt:resources,gwt:compile和war:爆炸。默认情况下,它们是在增量构建上执行的,这意味着每次资源都会发生变化。由于这些目标/插件未针对增量构建进行优化,因此需要一段时间才能完成。

如果你想加快速度,你可以告诉m2e只在完整版本(即项目清理后)上使用

执行它们
<execute>
  <runOnIncremental>false</runOnIncremental>
</execute>

然后,手动执行eclipse清理构建将自动触发它们的执行。请注意,JDT有时会决定将增量构建推广到完整构建。

我相信(但可能是错误的),如果你使用谷歌Eclipse插件,你可以完全忽略gwt:resources和gwt:compile(通过用&lt; ignore&gt;替换&lt; execute&gt;)。

答案 1 :(得分:9)

Maven构建的原因很可能是启用 Maven项目构建器(项目属性&gt;构建器)。

您可以禁用它 - 只要您选择了 Java Builder - Eclipse将继续编译已编辑的文件。

答案 2 :(得分:4)

好吧,我通常取消选中:

  

项目|自动构建

我只是讨厌它一直在编译。