自定义Ant Task
来源:互联网 发布:天音网络黄涛 编辑:程序博客网 时间:2024/04/28 17:27
在ant打包的时候老是忘记把manifest.xml中的android:debugable改为false,后来干脆自定义个task来修改这项
官方的Turtorialhttp://ant.apache.org/manual/tutorial-writing-tasks.html
ant一般要干的事情,
1,编译我的东西
2,打一个可以发布的jar
3,清除现场
下面是个加上了个<property>s的简单的demo
<?xml version="1.0" encoding="ISO-8859-1"?><project name="MyTask" basedir="." default="jar"> <property name="src.dir" value="src"/> <property name="classes.dir" value="classes"/> <target name="clean" description="Delete all generated files"> <delete dir="${classes.dir}" failonerror="false"/> <delete file="${ant.project.name}.jar"/> </target> <target name="compile" description="Compiles the Task"> <mkdir dir="${classes.dir}"/> <javac srcdir="${src.dir}" destdir="${classes.dir}"/> </target> <target name="jar" description="JARs the Task" depends="compile"> <jar destfile="${ant.project.name}.jar" basedir="${classes.dir}"/> </target></project>
首先自定义task要继承于ant.jar中的org.apache.tools.ant.Task,实现自己的execute内容
简单的demo如下,
import org.apache.tools.ant.Task;public class HelloWorld extends Task { public void execute() { // use of the reference to Project-instance String message = getProject().getProperty("ant.project.name"); // Task's log method log("Here is project '" + message + "'."); // where this task is used? log("I am used in: " + getLocation() ); }}
获取自定义task的父工程可以通过方法getProject(),例如,projectName = getProject().getProperty("project.name"); 但是,不要在自定义task的构造方法中调用,此时会返回为null,在execute方法中才可以拿到数据
还有两个重要方法,可以从project中获取数据
String getProperty(String propertyName)
String replaceProperties(String value)
下面说下不带参数的build.xml文件中的调用
<?xml version="1.0" encoding="ISO-8859-1"?><project name="MyTask" basedir="." default="use"> ... <target name="use" description="Use the Task" depends="jar"> <taskdef name="helloworld" classname="HelloWorld" classpath="${ant.project.name}.jar"/>//定义声明过程 <helloworld/>//调用过程 </target></project>
下面说下在build.xml的task中添加参数,调用的时候
<helloworld message="Hello World"/>,task中通过setMessage来读取,
import org.apache.tools.ant.Task;import org.apache.tools.ant.BuildException;public class HelloWorld extends Task { String message; public void setMessage(String msg) { message = msg; } public void execute() { if (message==null) { throw new BuildException("No message set."); } log(message); }}
<helloworld> <message msg="Nested Element 1"/> <message msg="Nested Element 2"/> </helloworld>对于的读取方式
先定义Message的内部类表示Message节点,该类有个msg属性,同样有一个setter函数,使其在build.xml中赋值,再根据Ant的框架,定义给Helloword注入message的 createXXX函数和持有Message列表的message对象,ant就会为你完成自动注入。
import java.util.Vector;
import java.util.Iterator;... public void execute() { if (message!=null) log(message); for (Iterator it=messages.iterator(); it.hasNext(); ) { // 4 Message msg = (Message)it.next(); log(msg.getMsg()); } } Vector messages = new Vector(); // 2 public Message createMessage() { // 3 Message msg = new Message(); messages.add(msg); return msg; } public class Message { // 1 public Message() {} String msg; public void setMsg(String msg) { this.msg = msg; } public String getMsg() { return msg; } }...
参考,http://www.wangchao.net.cn/bbsdetail_69833.html
- 自定义Ant Task
- ant 标签名 自定义Task
- 自定义简单的ant task
- 自定义简单的ant task
- Ant自定义的task中嵌套元素
- 在eclipse内调试自定义ant task
- 在eclipse内调试自定义ant task
- ant 使用命名空间自定义task
- 基于JAXB的Ant自定义Task
- [Ant] 创建并调试自定义的Ant Task
- 如何在eclipse中调试自定义的ant task
- 如何从自定义的Ant task中返回值
- 在myeclipse中Debug自定义的ant task
- ant脚本中用beanshell实现简单的自定义task
- Ant 常用Task
- ANT SVN TASK
- ant war task 例子
- ant常用task
- Socket iocp
- HDU2191 多重背包 三种解法
- c++ const 成员函数
- Mr. Process的一生-Linux内核的社会视角 (1)调度
- Uboot启动流程
- 自定义Ant Task
- 正弦函数及其FFT变换(一)
- HDU--3884[Hinanai Tenshi’s peach garden] 枚举汇聚点O(N^2)
- 某EDN博客是俺好多工作过程总结---该网站改版后竟然没了!
- 最小生成树
- gcc的主要选项
- 安装时出现“Microsoft Office 2010 不支持从预发布版本 升级”而中断?
- TAB Control
- 个人经典音乐收藏(二)Tell Me Why,Declan Galbraith