`
绿色幽灵
  • 浏览: 469 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

记录一个关于如何实现Ant自定义task,并且进行有效单元测试的例子

阅读更多
本实例主要讲述如何对ant build.xml进行定制,以java方式实现其相关功能,方便进行拓展定制自定义任务
关于最简单的Ant customize例子,网上应该有很多实例,这里直接上一个例子,见资源AntCustomizeTask.rar,可直接下载运行build.xml即可。下面进入正题
一、关于build自带命令java实现,如delete,java,javac,mkDir,zip等
通过读ant.jar源码我们发现,在ant.taskrefs包目录下,存在我们需要的各种实现实例下面以mkdir,javac为例,讲述如何利用ant的API在java中实现这2个命令
1.mkdir

    public static void makeDir(String source) {
        Mkdir mkDir = new Mkdir();
        Project project = new Project();
        project.init();
        mkDir.setProject(project);
        mkDir.setTaskName("mkdir");
        mkDir.setDescription("mkDir");
        mkDir.setDir(new File(source));
        mkDir.execute();
    }
通过测试我们发现,直接通过构建包目录下Mkdir命令即可很方便实现改命令
2.javac
    public static void javac(Path srcdir, String destDir, String  excludes, Path classpath) {
        Javac javac = new Javac();
        Project project = new Project();
        project.init();
        javac.setProject(project);
        javac.setFork(true);
        javac.setTaskName("javac");
        javac.setDescription("javac");
        javac.setSrcdir(srcdir);
        javac.setDestdir(new File(destDir));
        javac.setExcludes(excludes);
        javac.setClasspath(classpath);
        javac.execute();
    }
这里需要注意的是,其中classPath,由于我们通常不同项目都是需要依赖不同jar,所以该参数我们一般通过ant文件中自定义,后端通过ant中的path id去做传递,通过以下API即可获取ant中定义的名为lib.classpath的路径:
this.getProject().getReferences().get("lib.classpath").toString()

二、关于如何实现定制的antTask的java单元测试
我们通过查找ant相关文档发现,他提供了一个JUnit Rule org.apache.tools.ant.BuildFileRule,通过该providers我们可以轻松实现ant脚本的单元测试问题
下面附上ant官方自带给出的ant单元测试实例:见HelloWorldTest.rar
有了以上功能,我们可以轻松通过ant满足各种定制化的环境部署要求,保障开发和运维的协同
对于实现企业内部DevOps管理可以有比较大的帮助
        
交流可邮件yudeli@cn.ibm.com
本文系原创,转载请联系作者
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics