Ant 相信大家都不陌生,你可以把它理解为使用 xml 格式描述的一系列命令处理工具。它是一种基于Java的build工具。理论上来说,它有些类似于(Unix)C中的make、有些类似于基于shell命令编写的sh脚本文件。Ant 用 Java 的类来扩展。(用户)不必编写 shell 命令,而是基于XML配置文件的,通过调用 target 树,就可执行各种 ant task。每个 task 由实现了一个特定 Task 接口的对象来运行。
常规来说 Ant 是需要独立运行库来运行,相当于要下载一个类似于 tomcat 这样的包并进行配置后才可以使用。而现在的项目我们大多数基于 Maven 构建,如果你希望在编译项目的过程中(编译前中后通过 phase 控制)做相应的处理操作(自动生成文件、替换项目代码中的常量值、执行相关命令等),那么可以通过本文所述插件 maven-antrun-plugin
来将 maven 构建和 ant 脚本的运行有效结合起来,该插件配置即用不需要下载额外的运行库。
下面是一个简单的示例,演示了 "自动生成 Version.java 文件,然后替换文件中的变量值" 的场景:
xml
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<goals>
<goal>run</goal>
</goals>
<phase>generate-sources</phase>
<configuration>
<target>
<property name="src.dir" value="${project.build.sourceDirectory}"/>
<property name="package.dir" value="com/shanhy/demo"/>
<property name="package.name" value="com.shanhy.demo"/>
<property name="buildtime" value="${maven.build.timestamp}"/>
<echo file="${src.dir}/${package.dir}/Version.java"
message="package ${package.name};${line.separator}${line.separator}"/>
<echo file="${src.dir}/${package.dir}/Version.java" append="true"
message="public final class Version {${line.separator}"/>
<echo file="${src.dir}/${package.dir}/Version.java" append="true"
message=" public static String NUMBER = "${project.version}";${line.separator}"/>
<echo file="${src.dir}/${package.dir}/Version.java" append="true"
message=" public static String BUILD_TIME = "${buildtime}";${line.separator}"/>
<echo file="${src.dir}/${package.dir}/Version.java" append="true"
message="}${line.separator}"/>
<replace file ="${src.dir}/${package.dir}/Version.java" token="-SNAPSHOT"
value="" />
</target>
</configuration>
</execution>
</executions>
</plugin>
示例旨在抛砖引玉的意义,能有效理解该插件的实际作用和使用方法,至于你希望运行更复杂的业务处理或者运行更多的脚本内容,你都可以在 <target></target>
节点中编写任意 ant 脚本内容,或者参考插件官方使用文档,指定一个独立外置的 build.xml 文件来执行 ant 脚本。
插件的官方使用文档地址:https://maven.apache.org/plugins/maven-antrun-plugin/usage.html
Ant 语法官方使用手册地址: https://ant.apache.org/manualdownload.cgi
(END)