每次更改源文件 (GWT) 时都会调用 Maven Project Builder [英] Maven Project Builder is invoked every time I change a source file (GWT)

查看:38
本文介绍了每次更改源文件 (GWT) 时都会调用 Maven Project Builder的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Recently I converted my GWT web-app (GWT 2.4.0) to a maven project.
I am using maven 2.2.1, gwt-maven plugin (2.4.0), Eclipse Indigo (3.7) and the m2eclipse plugin.

依赖项和一般配置似乎很好,因为 Web 应用程序编译没有任何问题,并且也可以在生产模式下运行.
这同样适用于托管模式.

The dependencies and general configuration seem to be fine as the web-app compiles without any problems and also works in production mode.
The same applies to hosted mode.

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

However I have a strange behavior: When I change a single line in a Java/GWT source file, the Maven Project Builder is invoked and this steps takes painfully long (around 10 secs) and eclipse sometimes becomes unusable during this time.

这是m2eclipse的正常行为吗?

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

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

Note: I had to configure the life cycle plugin for m2eclipse. Here is the important section of the pom file:

<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>

推荐答案

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

This perfectly illustrates why m2e doesn't let any "unknown" plugins to run on incremental build by default ( http://wiki.eclipse.org/M2E_plugin_execution_not_covered#Background ). Most maven plugins aren't fit for incremental building and do a complete build whenever they're invoked (and as a bonus, you might get classloader leakages).

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

In your plugin management section, you specified that gwt:resources, gwt:compile and war:exploded should be executed. By default, they're executed on incremental builds, that means on EVERY resource change. Since these goals/plugins aren't optimized for an incremental build, they take a while to complete.

如果您想加快速度,您可以使用

If you want to speed things up, you can tell m2e to execute them only on Full builds (i.e. after a project clean) by using

<execute>
  <runOnIncremental>false</runOnIncremental>
</execute>

然后,手动执行 eclipse clean build 将自动触发它们的执行.请注意,JDT 有时会决定将增量构建提升为完整构建.

Then, manually doing an eclipse clean build will automatically trigger their execution. Be aware that JDT sometimes decides to promote incremental builds to full ones.

我相信(但可能是错误的),如果您使用的是 Google Eclipse 插件,则可以完全忽略 gwt:resources 和 gwt:compile(通过将 <execute> 替换为 <ignore>).

I believe (but may be wrong) that, if you were using the Google Eclipse Plugin, you could ignore gwt:resources and gwt:compile altogether (by replacing <execute> with <ignore>).

这篇关于每次更改源文件 (GWT) 时都会调用 Maven Project Builder的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆