maven - 如何将 maven antrun 插件绑定(bind)到 clean 阶段

标签 maven maven-antrun-plugin

我刚刚将一个 ant 项目翻译成 maven,但是由于 maven 并没有真正处理部署,所以我在构建中引入了一些 antrun。但是,当我尝试执行它时,插件会跳过我的任务。例如,当我运行 mvn clean antrun:run 时,我收到以下消息:未定义 ant 目标 - 已跳过。在我试图覆盖部署阶段以进行实际部署而不是上传到存储库的第二阶段也是如此。

请在下面找到我的 pom.xml(类型:pom)的摘录:

            <plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.6</version>
            <executions>
                <execution>
                    <id>clean</id>
                    <configuration>
                        <task>
                            <echo>Cleaning deployed website</echo>
                        </task>
                        <tasks>
                            <delete dir="${deployRoot}/mydir/${env}"/>
                        </tasks>
                    </configuration>
                    <phase>clean</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
                <execution>
                    <id>deployment</id>
                    <configuration>
                        <task>
                            <echo>Deploying website</echo>
                        </task>
                        <tasks>
                            <echo>Copying website artifact to deployment </echo>
                            <mkdir dir="${deployRoot}/mydir/${env}" />
                            <unzip
                                src="${project.basedir}/target/${env}.${project.version}.zip"
                                dest="${deployRoot}/mydir/${env}" />
                            <chmod perm="ugo+rx">
                                <fileset dir="${deployRoot}/mydir/${env}/web-exploded/bin">
                                    <include name="**/*.sh" />
                                    <include name="**/*.bat" />
                                </fileset>
                            </chmod>
                        </tasks>
                    </configuration>
                    <phase>deploy</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

最佳答案

在您的 pom.xml ,您定义了两种类型的执行:

  • 一个链接到 clean
  • 一个链接到 deploy阶段。顺便注意一下,对于 Maven,deploy 不是 意思是在服务器上部署我的(网络)应用程序,但在远程存储库上部署 Artifact 。请阅读 deploy plugin information更多细节。

  • 所以如果你运行命令 mvn 部署 ,当 Maven 生命周期到达 deploy阶段,它将运行插件执行(pom.xml 中的第二个)。

    但是,在您的情况下,您是 不是 运行默认的 Maven 生命周期,因为您的命令是 mvn antrun:运行 (我在这里不考虑 clean 目标,因为它与问题无关)。这可以在 Maven 中翻译以运行 antrun 插件,目标运行。这样做的问题是您没有为直接调用 Ant 插件定义任何配置(其中包含 Ant 任务)。

    所以有两个解决方案:
  • 将第二次执行绑定(bind)到 install阶段,然后运行 ​​mvn clean install而不是 mvn antrun:run .请注意,在这种情况下,您将运行整个 Maven 生命周期(即编译、测试、打包)。
  • 创建此插件的配置不是 与任何执行有关。从 XML 的角度来看,只需添加(或移动)第二个 <configuration>阻止成为 <plugin> 的 child 定义。

  • 如果您选择第二种解决方案,您将获得 pom.xml像这个:
           <plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.6</version>
            <!-- For cleaning -->
            <executions>
                <execution>
                    <id>clean</id>
                    <configuration>
                        <task>
                            <echo>Cleaning deployed website</echo>
                        </task>
                        <tasks>
                            <delete dir="${deployRoot}/mydir/${env}"/>
                        </tasks>
                    </configuration>
                    <phase>clean</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <tasks>
                    <echo>Copying website artifact to deployment </echo>
                    ...
                </tasks>
            </configuration>
        </plugin>
    

    关于maven - 如何将 maven antrun 插件绑定(bind)到 clean 阶段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3977898/

    相关文章:

    java - 多模块项目的 Maven 报告和站点生成

    java - 在 spring Roo > 1.1.5 中找不到 RooEntity 注释

    maven - 从 maven-antrun-plugin 中的私有(private)存储库请求自定义 ant 任务

    maven - 包阶段 "copying webapp resources"后 "building war"步前如何调用ant任务处理webapp文件?

    java - 解决 io.netty :netty-transport-native-epoll 时 Jenkins 中的 Maven 出错

    java - Apache Storm - Storm-starter 上的 ClassNotFoundException

    maven - 在war打包之前在maven构建阶段运行ant任务?

    maven - Maven Antrun:将Maven属性传递给ant

    java - 在 pom.xml 中指定换行符

    maven-antrun-plugin 返回插件未找到