Maven (m2e) 没有执行 ant 任务

Posted

技术标签:

【中文标题】Maven (m2e) 没有执行 ant 任务【英文标题】:Maven (m2e) is not executing ant task 【发布时间】:2016-09-16 08:00:45 【问题描述】:

我有一个 POM 文件(由 Eclipse 执行),我想在 generate-sources 阶段执行一个 ANT 任务。基于m2e documentation,在How to solve "Plugin execution not covered by lifecycle configuration" for Spring Data Maven Builds、Maven: execute antrun task during package和Where should be placed maven-compiler-plugin declaration: in <plugins> or <pluginManagement>?,我这样写了我的POM文件:

<?xml version="1.0" encoding="UTF-8"?>
    <project>

    ...

    <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-antrun-plugin</artifactId>
                                        <versionRange>[1.8,)</versionRange>
                                        <goals>
                                            <goal>generate-sources</goal>
                                        </goals>
                                    </pluginExecutionFilter>
                                    <action>
                                        <execute/>
                                    </action>
                                </pluginExecution>
                            </pluginExecutions>
                        </lifecycleMappingMetadata>
                    </configuration>
                </plugin>

            </plugins>
        </pluginManagement>

        <plugins>

            <plugin>
                <!-- Plugin 1 -->
            </plugin>

            <plugin>
                <!-- Plugin to be executed during generate-sources phase. -->
            </plugin>

            <plugin>
                <!-- Should be in the generate-sources phase after the plugin above. -->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <version>1.8</version>
                <executions>
                    <execution>
                        <id>ant-test</id>
                        <configuration>

                            <task>
                                <echo message="ANT TEST" />
                            </task>

                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>

    ...

</project>

我从阅读中了解到,我要求告诉 Maven 以下内容:首先要求 Maven 的 Eclipse 插件(m2e)允许 maven-antrun-plugin(1.8 版或更高版本)在generate-sources 期间执行。接下来,在generate-sources阶段和第一个插件执行后,调用ant插件运行回显我的消息的任务

但是,没有显示消息。当我只执行generate-sources 目标和执行install 目标时都不会。

如果我关注this sugestion here,并在&lt;execution&gt; 中添加&lt;phase&gt; 元素,如下所示:

<executions>
    <execution>
        <id>ant-test</id>
        *<phase>generate-sources</phase>*
        <configuration>

            <task>
                <echo message="ANT TEST" />
            </task>

        </configuration>
        <goals>
            <goal>run</goal>
        </goals>
    </execution>
</executions>

我有一条 Eclipse 错误消息:生命周期配置未涵盖插件执行:org.apache.maven.plugins:maven-antrun-plugin:1.8:run(执行:ant-test,阶段:generate-sources )。 Here 显示了一个示例,其中没有特定的 &lt;pluginManagement&gt; 用于 ant 插件。但我也没有成功。

那么这里缺少什么?

谢谢,

拉斐尔·阿方索

【问题讨论】:

将m2e中的配置从generate-sources改为run... 抱歉,没有成功。 :( 【参考方案1】:

其实我发现报错信息Plugin execution not Covered by Lifecycle configuration: org.apache.maven.plugins:maven-antrun-plugin:1.8:run (execution: ant-test, phase: generate-来源) 对 Maven 执行没有影响。该消息显示没有问题。说实话,我不得不将task 更改为target,但消息仍然显示。可能只是一种m2e的bug,唯一的影响就是让我们烦恼。

【讨论】:

【参考方案2】:

实际上,我做了下面的结构,并且成功了:

<build>
        <plugins>
            <plugin>
                ....
            </plugin>
            <plugin>
                ...
            </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.apache.maven.plugins
                                        </groupId>
                                        <artifactId>
                                            maven-antrun-plugin
                                        </artifactId>
                                        <versionRange>
                                            [1.8,)
                                        </versionRange>
                                        <goals>
                                            <goal>run</goal>
                                        </goals>
                                    </pluginExecutionFilter>
                                    <action>
                                        <ignore></ignore>
                                    </action>
                                </pluginExecution>
                            </pluginExecutions>
                        </lifecycleMappingMetadata>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
</build>

【讨论】:

以上是关于Maven (m2e) 没有执行 ant 任务的主要内容,如果未能解决你的问题,请参考以下文章

maven与ant的区别

用于非Java CI / CD的Maven over Ant [关闭]

maven中的多个antrun任务

ANT脚本中的条件任务执行

Ant或Maven是干啥的?

Flyway Ant 任务在没有 Ant 的调试模式的情况下显示迁移错误