如何在 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-resourcesresources: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中如何设置启动参数

在保存文件时,如何让 eclipse m2e 构建当前项目和引用它的 EAR 项目?

在 Eclipse 中启动一个 Maven J2Me 项目并运行它

如何在 Eclipse 中更改引用的类提供程序?

如何在eclipse中启动两个tomcat

Eclipse中Maven Install时发生错误