如何在 Eclipse 中保存时启动 Maven“编译”目标?
Posted
技术标签:
【中文标题】如何在 Eclipse 中保存时启动 Maven“编译”目标?【英文标题】:How do I start Maven "compile" goal on save in Eclipse? 【发布时间】:2011-02-07 14:42:55 【问题描述】:我有一个带有 javascript 代码的 Maven 项目。在 pom.xml 中有一个特殊的 javascript 编译器插件连接到 compile 目标。因此,当我键入“mvn compile”时,src/main/javascript 中的 JavaScript 源代码将被编译(压缩和混淆)并保存到 target/classes 目录中。在命令行上这很好用。
但现在我想通过使用带有 m2eclipse 插件的 Eclipse 来简化开发。我希望 Eclipse 在我更改 JavaScript 文件时调用编译目标。我怎样才能做到这一点?当我保存一个 JavaScript 文件时,我只会在 maven 控制台中看到一个“AUTO_BUILD”日志记录行,就是这样。
在项目首选项中,可以配置生命周期映射。但由于某种原因,我只能将自定义目标添加到“清理后”和“资源更改后”。当我将“编译”目标添加到“资源更改”生命周期映射时,JavaScript 文件会在我更改资源时进行编译。所以我可以把我的 JavaScript 文件放到资源文件夹中,这样就可以了,但这听起来很丑。
当我告诉 Eclipse “清理”我的项目时,它也可以工作。然后调用编译目标target。所以功能就在那里,我只想在保存 JavaScript 文件时执行它。这一定有可能吗?
有什么提示吗?
【问题讨论】:
【参考方案1】:在项目首选项中,可以配置生命周期映射。但由于某种原因,我只能将自定义目标添加到“清理后”和“资源更改后”。当我将“编译”目标添加到“资源更改”生命周期映射时,JavaScript 文件会在我更改资源时进行编译。所以我可以把我的 JavaScript 文件放到资源文件夹中,这样就可以了,但这听起来很丑。
您已经注意到,Eclipse 中增量构建的默认目标是process-resources
和resources:testResources
。就个人而言,我觉得将 js 文件放在资源下并不难看,我只会在 process-resources
上绑定 javascript 插件。
当我告诉 Eclipse “清理”我的项目时,它也可以工作。然后调用编译目标target。
在完整构建时(从 Eclipse 清理后),运行目标是 process-test-resources
,这实际上是一个构建生命周期阶段,其中包括 compile
阶段,这就是当您从 Eclipse 清理项目时调用 compile
的原因。但这并不能解决您的问题(在保存时运行您的插件)。
正如我所说,我只是将 js 文件放在资源下。但也许还有另一种选择:将另一个 Builder 添加到项目中。 右键单击您的项目,然后 Properties > Builders > New > Maven Build 并将您的插件目标定义为在 Auto Build Goals 期间运行的目标(更改或删除其他目标以满足您的需要):
alt text http://img694.imageshack.us/img694/2382/screenshot003wo.png
但我更喜欢另一种方法。
【讨论】:
在 New-Builder 向导中没有这个构建器可用(在我的 Helios + m2eclipse 的特定设置中)。你是怎么做到的? 相同。没有 maven builder,虽然我安装了 m2e。 m2e 一定在过去两年发生了变化。 @antony.trupe 是的。我也无法按照这些说明进行操作。 在我看来,功能因此发生了变化:wiki.eclipse.org/M2E_plugin_execution_not_covered;我在right click project
-> run as
-> run configurations
中找到了类似的东西,您可以在其中配置任何 maven 目标。但它不绑定到特定的项目构建生命周期。【参考方案2】:
因为@pascal-thivent 的答案已经过时(如 cmets 中所述)并由@akostadinov https://www.eclipse.org/m2e/documentation/m2e-execution-not-covered.html 暗示:
您必须添加有效的 Maven 生命周期操作
maven install plugin在本地自动部署的jar示例:
<build>
<!-- ... -->
<pluginManagement>
<plugins>
<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-jar-plugin</artifactId>
<versionRange>[2.0,)</versionRange>
<goals>
<goal>jar</goal>
</goals>
</pluginExecutionFilter>
<action>
<execute>
<runOnConfiguration>true</runOnConfiguration>
<runOnIncremental>true</runOnIncremental>
</execute>
</action>
</pluginExecution>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<versionRange>[2.5.0,)</versionRange>
<goals>
<goal>install</goal>
</goals>
</pluginExecutionFilter>
<action>
<execute>
<runOnConfiguration>true</runOnConfiguration>
<runOnIncremental>true</runOnIncremental>
</execute>
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
提示:与Maven Project Builder is invoked every time I change a source file (GWT) 相关,并作为警告:如果您已将测试包含在正常的 Maven 构建周期中,安装通常会包含测试
【讨论】:
以上是关于如何在 Eclipse 中保存时启动 Maven“编译”目标?的主要内容,如果未能解决你的问题,请参考以下文章
在保存文件时,如何让 eclipse m2e 构建当前项目和引用它的 EAR 项目?