Tiny示例:对整个目录中的POM树进行批量处理

原来我的POM中groupId是org.tinygroup,artifactId是对应的工程名,如parser。
后出有一个处理上的原因,而且便于进行分隔,还可以避免与别人的冲突,想把所有的artifactId前面增加个“org.tinygroup.”前缀,比如parser就变成org.tinygroup.parser。但是这样一来,所有的依赖信息也全都对不上了,也就是要对工程的artifactId及依赖中的artifactId都进行修改才行。
由于工程数比较多,一个一个手工改总是麻烦的,因此就想着写程序进行处理。
实现方案1:

  1. public class ChangePom {
  2.     public static void main(String[] args) throws Throwable {
  3.         File file1 = new File("D:\\SVN\\tinyorg-code\\trunk\\Sources\\");
  4.         processFolder(file1);
  5.     }
  6.     private static void processFolder(File file1) throws Exception {
  7.         File[] files = file1.listFiles();
  8.         for (File file : files) {
  9.             if (file.isDirectory()) {
  10.                 processFolder(file);
  11.             }
  12.             if (file.getName().equals("pom.xml")) {
  13.                 processPomFile(file);
  14.             }
  15.         }
  16.     }
  17.     private static void processPomFile(File file) throws Exception {
  18.         System.out.println("processing:" + file.getAbsolutePath());
  19.         XmlStringParser parser = new XmlStringParser();
  20.         XmlDocument doc = parser.parse(IOUtils.readFromInputStream(new FileInputStream(file), "utf-8"));
  21.         XmlNode dependencies = doc.getRoot().getSubNode("dependencies");
  22.         XmlNode projectArtifactId = doc.getRoot().getSubNode("artifactId");
  23.         projectArtifactId.setContent("org.tinygroup" + projectArtifactId.getContent().trim());
  24.         if (dependencies != null) {
  25.             List<XmlNode> dependencyList = dependencies.getSubNodes("dependency");
  26.             if (dependencyList != null) {
  27.                 for (XmlNode node : dependencyList) {
  28.                     XmlNode groupId = node.getSubNode("groupId");
  29.                     if (groupId.getContent().trim().equals("org.tinygroup")) {
  30.                         XmlNode artifactId = node.getSubNode("artifactId");
  31.                         artifactId.setContent("org.tinygroup." + artifactId.getContent().trim());
  32.                     }
  33.                 }
  34.             }
  35.         }
  36.         XmlFormater formater = new XmlFormater();
  37.         IOUtils.writeToOutputStream(new FileOutputStream(file), formater.format(doc), "UTF-8");
  38.     }
  39. }
复制代码

呵呵,程序运行一会,马上搞定了。
当然,这个时候,可能感觉还是有点麻烦,OK,再换一种写法:

  1. public class ChangePom1 {
  2.     public static void main(String[] args) throws Throwable {
  3.         FileObject fileObject= VFS.resolveFile("D:\\SVN\\tinyorg-code\\trunk\\Sources\\");
  4.         fileObject.foreach(new FileNameFileObjectFilter("pom\\.xml"),new FileObjectProcessor() {
  5.             public void process(FileObject fileObject) throws Exception {
  6.                 System.out.println("processing:" + fileObject.getAbsolutePath());
  7.                 XmlStringParser parser = new XmlStringParser();
  8.                 XmlDocument doc = parser.parse(IOUtils.readFromInputStream(fileObject.getInputStream(), "utf-8"));
  9.                 XmlNode dependencies = doc.getRoot().getSubNode("dependencies");
  10.                 XmlNode projectArtifactId = doc.getRoot().getSubNode("artifactId");
  11.                 projectArtifactId.setContent("org.tinygroup" + projectArtifactId.getContent().trim());
  12.                 if (dependencies != null) {
  13.                     List<XmlNode> dependencyList = dependencies.getSubNodes("dependency");
  14.                     if (dependencyList != null) {
  15.                         for (XmlNode node : dependencyList) {
  16.                             XmlNode groupId = node.getSubNode("groupId");
  17.                             if (groupId.getContent().trim().equals("org.tinygroup")) {
  18.                                 XmlNode artifactId = node.getSubNode("artifactId");
  19.                                 artifactId.setContent("org.tinygroup." + artifactId.getContent().trim());
  20.                             }
  21.                         }
  22.                     }
  23.                 }
  24.                 XmlFormater formater = new XmlFormater();
  25.                 IOUtils.writeToOutputStream(fileObject.getOutputStream(), formater.format(doc), "UTF-8");
  26.             }
  27.         });
  28.     }
  29. }
复制代码

下面的xml格式化并输出到文件中,也可以写成:

  1. formater.format(doc,fileObject.getOutputStream();
复制代码

当然,上面只是临时进行一下处理,中间的Xml处理写得稍微丑陋一点。

posted @ 2015-07-01 10:45  Tiny框架  阅读(202)  评论(0编辑  收藏  举报