eclipse 每次更改源文件 (GWT) 时都会调用 Maven Project Builder
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/8564872/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Maven Project Builder is invoked every time I change a source file (GWT)
提问by ümit
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.
最近我将我的 GWT 网络应用程序(GWT 2.4.0)转换为一个 Maven 项目。
我正在使用 maven 2.2.1、gwt-maven 插件(2.4.0)、Eclipse Indigo (3.7) 和 m2eclipse 插件。
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.
依赖项和一般配置似乎很好,因为 web 应用程序编译没有任何问题,并且也可以在生产模式下工作。
这同样适用于托管模式。
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.
但是,我有一个奇怪的行为:当我更改 Java/GWT 源文件中的一行时,Maven Project Builder
会调用 并且此步骤需要很长时间(大约 10 秒),并且在此期间 eclipse 有时会变得无法使用。
Is this a normal behavior of m2eclipse?
这是 m2eclipse 的正常行为吗?
And if it is, is there any way to speed it up?
如果是,有什么办法可以加快速度吗?
Note: I had to configure the life cycle plugin for m2eclipse. Here is the important section of the pom file:
注意:我必须为 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>
回答by Fred Bricon
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).
这完美地说明了为什么默认情况下 m2e 不允许任何“未知”插件在增量构建上运行(http://wiki.eclipse.org/M2E_plugin_execution_not_covered#Background)。大多数 Maven 插件不适合增量构建,并且在调用它们时进行完整构建(作为奖励,您可能会遇到类加载器泄漏)。
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.
在您的插件管理部分,您指定应该执行 gwt:resources、gwt:compile 和 war:exploded。默认情况下,它们在增量构建上执行,这意味着在每次资源更改时执行。由于这些目标/插件没有针对增量构建进行优化,因此它们需要一段时间才能完成。
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
如果你想加快速度,你可以告诉 m2e 只在完整构建(即在项目清理之后)执行它们,方法是使用
<execute>
<runOnIncremental>false</runOnIncremental>
</execute>
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.
然后,手动执行 eclipse clean build 将自动触发它们的执行。请注意,JDT 有时会决定将增量构建提升为完整构建。
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>).
我相信(但可能是错误的),如果您使用的是 Google Eclipse 插件,则可以完全忽略 gwt:resources 和 gwt:compile(通过将 <execute> 替换为 <ignore>)。
回答by Sri Sankaran
The reason for the Maven build is more than likely an enabled Maven Project Builder(Project properties > Builders).
Maven 构建的原因很可能是启用了Maven 项目构建器(项目属性 > 构建器)。
You can disable it and -- as long as you have the Java Builderselected -- Eclipse will continue to compile edited files.
您可以禁用它——只要您选择了Java Builder——Eclipse 将继续编译编辑过的文件。
回答by code-gijoe
Well, I usually uncheck :
好吧,我通常取消选中:
Project | Build Automatically
项目 | 自动构建
I just hate it getting compiling all the time.
我只是讨厌它一直在编译。