java调用ant工具

java调用ant

Ant是Java程序员的一个好的工具,主要可以帮助程序员进行java项目的的管理,包括批量编译、部署、文档生成等工作,其用途远不止如此,ant内置了大量的API进行各种文件系统操作,在各种应用服务器中都被广泛应用于程序和资源的部署。 Ant功能强大的地方在于,程序员不仅能通过编写Ant的脚本(build.xml)来进行各种文件部署管理操作,还可以通过调用Ant的丰富的API,甚至扩展Ant的API进行编程。 用于介绍Ant 脚本编写的书比较多,而介绍Java 调用 Ant API的书籍和资料比较少,初学者用户在进行Ant编程时会遇到不少麻烦,笔者也是在项目开发过程中,逐渐摸索并掌握了一些Java调用Ant API的一些方法和技巧,并将常用的案例收集起来呈现给大家(本文使用Ant 1.7.0版本),以供大家参考。当然,Ant的API非常丰富,本文仅做抛砖引玉之用,更强大的功能还需要读者自己在结合Ant的API进行摸索和领悟。 1. 目录操作:1) 创建目录

  1. Project prj=new Project();
  2. Mkdir mkdir=new Mkdir();
  3. mkdir.setProject(prj);
  4. mkdir.setDir(new File("d:\\temp\\dir1"));
  5. mkdir.execute();

2) 删除目录

  1. Project prj=new Project();
  2. Delete delete=new Delete();
  3. delete.setProject(prj);
  4. delete.setDir(new File("d:\\temp\\dir1")); //可同时将子目录及所有文件删除
  5. delete.execute();

注:对每一个Ant Task,如Mkdir,Delete、Copy、Move、Zip等,都必须设置一个Project对象,可以几个Ant Task共用一个Project对象,但不能有Ant Task不设置Project对象。 2. 文件拷贝和移动、更名1)文件copy

  1. Project prj=new Project();
  2. Copy copy=new Copy();
  3. copy.setProject(prj);
  4. copy.setFile(new File("d:\\temp\\f1.txt");
  5. copy.setTodir(new File("d:\\temp\\dir1"));
  6. copy.execute(); //将f1.txt文件copy到dir1中

2)copy文件并同时替换其中的内容, 如将 xml中的 @eosapp_name@ 替换成真正的应用名称

  1. Project prj=new Project();
  2. Copy copy = new Copy();
  3. copy.setEncoding("UTF-8");
  4. copy.setProject(prj);
  5. copy.setTodir("d:\\temp");
  6. FileSet fileSet=new FileSet();
  7. fileSet.setDir(new File(eosHome+"/base/template.app"));
  8. fileSet.setIncludes("**/*.xml");
  9. copy.addFileset(fileSet);
  10. FilterSet filter=copy.createFilterSet();
  11. filter.addFilter("eosapp_name","app1");
  12. copy.execute();

2)文件或目录移动Move的用法和Copy用法基本一致,Move本身为Copy的子类。

  1. Project prj=new Project();
  2. Copy copy=new Copy();
  3. copy.setProject(prj);
  4. copy.setFile(new File("d:\\temp\\f1.txt");
  5. copy.setTodir(new File("d:\\temp\\dir1"));
  6. copy.execute(); //将f1.txt文件移动到dir1中

3)文件改名:

  1. Project prj=new Project();
  2. Copy copy=new Copy();
  3. copy.setProject(prj);
  4. copy.setFile(new File("d:\\temp\\f1.txt");
  5. copy.setTodir(new File("d:\\temp\\f2.txt"));
  6. copy.execute(); //将f1.txt文件更名为f2.txt中

4)目录更名:

  1. Project prj=new Project();
  2. Copy copy=new Copy();
  3. copy.setProject(prj);
  4. copy.setFile(new File("d:\\temp\\dir1");
  5. copy.setTodir(new File("d:\\temp\\dir2"));
  6. copy.execute(); //将dir1目录更名为dir2,相当于将dir1目录下的所有文件移到dir2目录下

3.使用文件集 FileSet使用文件集可以同时将多个满足匹配条件的文件集合进行copy、move和压缩等操作。

  1. Project prj=new Project();
  2. Copy copy=new Copy();
  3. copy.setProject(prj);
  4. copy.setTodir(new File("d:\\temp\\todir"));
  5. FileSet fs=new FileSet();
  6. fs.setProject(prj);
  7. fs.setDir(new File("d:\\javaprj\\src"));
  8. fs.setIncludes("**/*.*"); //包含所有文件
  9. fs.setExcludes("**/CVS,**/*.class"); //排除CVS相关文件,以及.class文件
  10. copy.addFileset(fs);
  11. copy.execute();

注: FileSet的setIncludes, 和setExcludes方法输入pattern, pattern是一个使用“,”或空格分隔的匹配字符串,其中, “**”代表所有文件或目录,“*.*”代表说有文件, “*.java”代表所有扩展名为java的文件。 4.目录扫描,查找文件

  1. DirectoryScanner ds=new DirectoryScanner();
  2. ds.setBasedir(new File("d:\\temp\\war"));
  3. ds.setIncludes(new String[] {"**/*.jsp"});
  4. ds.scan();
  5. if(ds.getIncludedFilesCount()>0) {
  6. System.out.println("found jsp!");
  7. String[] includeFiles=ds.getIncludedFiles();
  8. for(String file:includeFiles){
  9. System.out.println(file);
  10. }
  11. }

5.文件压缩,打包//压缩为zip文件

  1. Project prj=new Project();
  2. Zip zip=new Zip();
  3. zip.setProject(prj);
  4. zip.setDestFile(new File("d:\\temp\\src.zip"));
  5. FileSet fileSet=new FileSet();
  6. fileSet.setProject(prj);
  7. fileSet.setDir(new File("d:\\javaprj\\prj1\\src"));
  8. fileSet.setIncludes("**/*.java");
  9. zip.addFileset(fileSet);
  10. zip.execute();
  11. //将class文件打成jar包
  12. Project prj=new Project();
  13. Jar jar=new Jar();
  14. jar.setProject(prj);
  15. jar.setDestFile(new File("d:\\temp\\prj1.jar"));
  16. FileSet fileSet=new FileSet();
  17. fileSet.setProject(prj);
  18. fileSet.setDir(new File("d:\\javaprj\\prj1\\bin"));
  19. fileSet.setIncludes("**/*.class,**/*.properties");
  20. jar.addFileset(fileSet);
  21. jar.execute();

6.文件解压1)将压缩文件中的所有文件解压

  1. Project prj=new Project();
  2. Expand expand=new Expand();
  3. expand.setProject(prj);
  4. expand.setSrc(new File("d:\\temp\\src.zip"));
  5. expand.setOverwrite(overwrite);
  6. expand.setDest("d:\\temp\\out\\src");
  7. expand.execute();

2)将压缩文件中的符合匹配条件的文件解压

  1. Project prj=new Project();
  2. Expand expand=new Expand();
  3. expand.setProject(prj);
  4. expand.setSrc(new File("d:\\temp\\src.zip"));
  5. expand.setOverwrite(overwrite);
  6. expand.setDest("d:\\temp\\out\\src");
  7. PatternSet patternset = new PatternSet();
  8. patternset.setIncludes("**/*.java");
  9. patternset.setProject(prj);
  10. expand.addPatternset(patternset);
  11. expand.execute();

3)利用Mapper解压文件: 如将 .../lib/*.jar 解压到 .../WEB-INF/lib目录下(去除目录结构)

  1. Expand expand = new Expand();
  2. expand.setProject(prj);
  3. expand.setSrc(new File(zipFilePath));
  4. expand.setDest(new File(webDir+"/WEB-INF/lib"));
  5. PatternSet pattern = new PatternSet();
  6. pattern.setIncludes("lib/*.jar");
  7. expand.addPatternset(pattern);
  8. FileNameMapper mapper=new FlatFileNameMapper();
  9. expand.add(mapper);
  10. /* another way using mapper
  11. Mapper mapper=expand.createMapper();
  12. MapperType type=new MapperType();
  13. type.setValue("flatten");
  14. mapper.setType(type);
  15. */
  16. expand.execute();

7.读取zip文件1) 读取zip文件中的文件和目录

  1. ZipFile zipfile = new ZipFile(new File(filepath));
  2. for (Enumeration entries = zipfile.getEntries(); entries.hasMoreElements();) {
  3. ZipEntry entry = (ZipEntry) entries.nextElement();
  4. if(entry.isDirectory())
  5. System.out.println("Directory: "+entry.getName());
  6. else
  7. System.out.println("file: "+entry.getName());
  8. }
  9. zipfile.close(); //ZipFile用完必须close,否则文件被锁定

2)zip文件扫描,在Zip文件中查找目录或文件

  1. ZipScanner scan=new ZipScanner();
  2. scan.setSrc(new File("d:\\temp\\test.zip"));
  3. scan.setIncludes(new String[] {"*","*/*"}); //查找目录(一、二级目录);
  4. scan.scan();
  5. String dirs[]=scan.getIncludedDirectories();
  6. scan.setIncludes(new String[]{"**/*.xml"}); //查找文件
  7. scan.scan();
  8. String files[]=scan.getIncludedFiles();

特别说明:尊重作者的劳动成果,转载请注明出处哦~~~http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt246

时间: 2024-10-31 21:59:50

java调用ant工具的相关文章

使用ant工具生成java代码时build failed,总是提示找不到第二张图的东西

问题描述 使用ant工具生成java代码时build failed,总是提示找不到第二张图的东西

java用ant.jar工具类执行sql脚本遇到问题

问题描述 java用ant.jar工具类执行sql脚本遇到问题 最近在研究用工具类ant.jar执行sql脚本文件,一般对数据和字段的操作都无问题,但当要执行生成触发器或者存储过程时却出错,有大神做过这方面的吗?或者用其他方法可以执行能生成存储过程和触发器的sql脚本?求解!新人无币,望见谅~ Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an

Java操作Ant压缩和解压文件及批量打包Anroid应用_Android

实现zip/tar的压缩与解压 java中实际是提供了对  zip等压缩格式的支持,但是为什么这里会用到ant呢? 原因主要有两个: 1. java提供的类对于包括有中文字符的路径,文件名支持不够好,你用其它第三方软件解压的时候就会存在乱码.而ant.jar就支持文件名或者路径包括中文字符. 2. ant.jar提供了强大的工具类,更加方便于我们对压缩与解压的操作. 注意事项: 1. 首先说明一下,关于皮肤或者类似于皮肤的Zip包,实际上公司可能会根据自己的规定或需求,自定义压缩包文件的结尾,实

Java测试覆盖率工具----Cobertura,EclEmma

Cobertura 是一个与Junit集成的代码覆盖率测量工具 它是免费.开源的 它可以与Ant和Maven集成,也可以通过命令行调用 可以生成HTML或XML格式的报告 可以按照不同的标准对HTML结果进行排序 为每个类.包以及整个项目计算所覆盖的代码行与代码分支的百分比例 原创文章,版权所有,允许转载,标明出处:http://blog.csdn.net/wanghantong Eclipse插件地址: http://ecobertura.johoop.de/update/ (requires

C# 制作Com组件:java调用.net DLL的方法

本文将详细为大家介绍一个java调用.net DLL的方法,以实现特殊的客户的特殊要求:"在Java项目中必须使用其提供的用.net写的DLL加密机制!" 环境与工具: ◆.net framework 3.5 C# ◆java jdk1.5, Tomcat 5.5 ◆jacob-1.15-M3 实现例子: 一.C# 制作Com组件 新建一个Class 项目,取名TestCom 代码 using System;  using System.Collections.Generic;  us

Java中StringUtils工具类的一些用法实例

  这篇文章主要介绍了Java中StringUtils工具类的一些用法实例,本文着重讲解了isEmpty和isBlank方法的使用,另外也讲解了trim.strip等方法的使用实例,需要的朋友可以参考下 StringUtils 方法的操作对象是 java.lang.String 类型的对象,是 JDK 提供的 String 类型操作方法的补充,并且是 null 安全的(即如果输入参数 String 为 null 则不会抛出 NullPointerException ,而是做了相应处理,例如,如果

JAVA之旅(一)——基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算

JAVA之旅(一)--基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算 Android老鸟重新学一遍JAVA是什么感觉?枯燥啊,乏味啊,而且归纳写博客,都是很痛苦的事情,但是程序之路这么长,你必须精通的不能再精通一门语言才行(有点说大了哈),但是最起码你要如鱼得水吧,我准备的资料有: JAVA编程思想 深入浅出JAVA 黑马,传智,慕课,极客学院等-的视频 Google搜索 我们既然是重新学一遍,那我们尽量就是用记事本去敲代码好了,这里我用notep

用Go语言写Android应用 (2) - 从Android的Java调用Go代码

用Go语言写Android应用 (2) - 从Android的Java调用Go代码 上一篇我们讲到,Go在Android中的作用,就相当于NDK中的C/C++.上节我们学习了参照NDK的方式用纯Go语言来写应用. 但是,也正如在Android中,C/C++主要是通过JNI的方式被Java代码调用,本节我们就学习如何使用Java代码来调用Go代码. Java调Go的JNI例子 Java部分 我们首先来看这个简单得不能再简单的Java部分的代码,只有一个TextView,然后调用Go写的Hello.

java hikvision-关于Java调用海康威视SDK的问题

问题描述 关于Java调用海康威视SDK的问题 在使用Java调用海康威视SDK时,提示"Error looking up function 'NET_DVR_Login_V30': 找不到指定的程序" 错误.一直无法找到原因,请高手指点. 我开发用的JAVA环境为1.7.0_79,开发工具为NetBeans8.1,海康威视SDK版本为CH-HCNetSDK(Windows32)V5.1.3.5_build20150701. 如能提供帮助,必有重谢. 以下为提示的错误信息: m_sDe