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处理写得稍微丑陋一点。

时间: 2024-10-15 20:41:10

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

Python递归列出目录中文件脚本及其匿名函数

1.递归列出目录里的文件的脚本举例 列出目录中的文件可以通过下面方法:os.listdir() In [1]: import os In [4]: os.listdir('/root') Out[4]: ['.tcshrc', '.bash_history', '.bashrc', 'ENV', '.cache', '.config', '.cshrc', '.bash_logout', 'python', '.ssh', 'shell', '.bash_profile', '.ipython'

IDEA不能将java以外的文件 编译到class目录中

问题场景: 根据相对路径找一个文件File,报错:“File” not found 解决方法: 1.build工程后,查看target -> class目录中,是否有自己需要的文件 2.如果没有,就修改pom.xml文件 <build>  <resources>    <resource>      <directory>src/main/java</directory>      <includes>        <i

开发遇到的问题---【导入别人的工程后,父工程中的pom依赖引入报错】

解决方法: 1.先查看responsity中下载下来了没有,如果没有,就去查看conf目录下的settings.xml文件,看看配置的保存依赖的地址和仓库地址配置的是否正确(国内建议配成阿里的仓库). 2.重新复制依赖,删除之后,重新导入,这时候一般就能解决. 3.若在父工程中的pom文件报红,但不影响工程的使用,这时候只用在<dependencyManagement>上边,再新建一个<dependencies>,再次导入依赖,这时候就会自动下载了.</dependencie

Centos中查询目录中内容命名ls

首先解释下这块, root代表当前登录用户,localhost代表主机名, ~代表当前主机目录,  #代表用户权限   #表示超级用户,$表示普通用户: 查询目录中内容命令 ls  (list缩写) 格式 ls [选项]  [文件或目录] 选项: -a 显示所有文件,包括隐藏文件 -l  显示详细信息 -d 查看目录属性 -h 人性化显示文件大小 -i  显示inode 超级用户root默认的当前目录是 root目录 我们可以用pwd命名(Print Working Directory 打印当前

Hive数据导入——数据存储在Hadoop分布式文件系统中,往Hive表里面导入数据只是简单的将数据移动到表所在的目录中!

转自:http://blog.csdn.net/lifuxiangcaohui/article/details/40588929 Hive是基于Hadoop分布式文件系统的,它的数据存储在Hadoop分布式文件系统中.Hive本身是没有专门的数据存储格式,也没有为数据建立索引,只需要在创建表的时候告诉Hive数据中的列分隔符和行分隔符,Hive就可以解析数据.所以往Hive表里面导入数据只是简单的将数据移动到表所在的目录中! Hive的几种常见的数据导入方式这里介绍四种:(1).从本地文件系统中

在共享文件夹中解压到linux其他目录中,千万注意软连接的问题

这几天一直在练习驱动,搭建一个简单的交叉编译环境,交叉编译工具链和开发板的源码都导进去linux的目录中,并且解压,但是执行一个简单的交叉编译命令总会出现一个奇怪的错误提示: as:unrecongnized option 'mcpu=XXX'; 百思不得其解,后来经过一个实验室的师兄的提示,终于明白了.这里有一个背景需要交代一下: 我是在windows下面的unbuntu虚拟机中进行的驱动开发练习. 首先,我建立了一个共享文件夹,将交叉编译链的压缩文件拷贝进去,这里我的压缩文件的名字为XXX.

搜索文件或目录中包含字符串的文件 java小程序

package com.ruishenh.spring.test; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Enumeration; import java.

php遍历指定目录中的内容2

输出文件是否可读写,可执行,并同时输出创建时间,修改时间,访问时间 //2.遍历指定目录中的内容 if ($arr['file']) {     $arrbyte = array("Byte","KB","MB","GB","TB","EB");     foreach ($arr['file'] as $val) {         //filetype函数返回指定文件或目录的类型  

遍历目录中所有文件并统计信息

遍历目录中所有文件,并且统计文件类型. #!/bin/bash #filename: filestat.sh #set -x if [ $# -ne 1 ]; then     echo $0 basepath;    echo fi path=$1 declare -A statarray; while read line; do   ftype=`file -b "$line"`   let statarray["$ftype"]++; done< <