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

简介:

原来我的POM中groupId是org.tinygroup,artifactId是对应的工程名,如parser。

后出有一个处理上的原因,而且便于进行分隔,还可以避免与别人的冲突,想把所有的artifactId前面增加个“org.tinygroup.”前缀,比如parser就变成org.tinygroup.parser。但是这样一来,所有的依赖信息也全都对不上了,也就是要对工程的artifactId及依赖中的artifactId都进行修改才行。

由于工程数比较多,一个一个手工改总是麻烦的,因此就想着写程序进行处理。

实现方案1:

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

呵呵,程序运行一会,马上搞定了。

当然,这个时候,可能感觉还是有点麻烦,OK,再换一种写法:

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

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

?
1
formater.format(doc,fileObject.getOutputStream();



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


相关文章
|
1月前
|
监控 数据处理 索引
使用Python批量实现文件夹下所有Excel文件的第二张表合并
使用Python和pandas批量合并文件夹中所有Excel文件的第二张表,通过os库遍历文件,pandas的read_excel读取表,concat函数合并数据。主要步骤包括:1) 遍历获取Excel文件,2) 读取第二张表,3) 合并所有表格,最后将结果保存为新的Excel文件。注意文件路径、表格结构一致性及异常处理。可扩展为动态指定合并表、优化性能、日志记录等功能。适合数据处理初学者提升自动化处理技能。
23 1
|
6月前
|
存储 缓存 Java
《Gradle构建脚本的基本结构和语法》
《Gradle构建脚本的基本结构和语法》
86 0
|
1月前
|
Java Nacos 数据安全/隐私保护
springboot使用configtree读取树形文件目录中的配置
springboot使用configtree读取树形文件目录中的配置
springboot使用configtree读取树形文件目录中的配置
|
4月前
|
SQL 数据采集 Java
Java【代码分享 02】商品全部分类数据获取(建表语句+Jar包依赖+树结构封装+获取及解析源代码)包含csv和sql格式数据下载可用
Java【代码分享 02】商品全部分类数据获取(建表语句+Jar包依赖+树结构封装+获取及解析源代码)包含csv和sql格式数据下载可用
41 0
|
4月前
|
XML 存储 JavaScript
【python】DOM模块读写XML文件
【python】DOM模块读写XML文件
23 0
|
9月前
ENVI_IDL:(批量处理)如何对HDF5文件进行GLT文件的创建并进行几何校正最终输出为IMG格式?
ENVI_IDL:(批量处理)如何对HDF5文件进行GLT文件的创建并进行几何校正最终输出为IMG格式?
99 0
|
JSON Shell 测试技术
gookit/config - Go应用配置管理,支持多种格式,多文件加载,支持数据合并,解析环境变量名等等
gookit/config - Go应用配置管理,支持多种格式,多文件加载,支持数据合并,解析环境变量名,绑定数据到结构体等等
139 0
gookit/config - Go应用配置管理,支持多种格式,多文件加载,支持数据合并,解析环境变量名等等
|
JavaScript 前端开发
requireJs压缩合并路径问题
随着前端开发的重要性,以及业务的复杂性,前端的模块化开发也被大众所接收,最常见的js框架requireJs,一个js文件对应一个模块,方便开发人员调试与维护,但是一个文件对应一个模块增加了http请求,降低了网站的性能。幸运的是requireJs提供了压缩工具r.js(点击下载),r.js需要node(Node 0.4.0 或更高版本,点击下载)环境支持,安装完node就可以在命令行里对前端代码进行优化了。
requireJs压缩合并路径问题
|
存储 数据采集 Python
scrapy自带文件下载器,实现多层级目录结构的存储
概scrapy既然是一款强大的爬虫框架,自然也实现了图片和文件的下载,FilesPipeline、ImagesPipeline分别是图片和文件的下载器,image也是文件的一种为什么还要单独提供一个image下载器?这是因为图片下载器还提供了一些额外方法:缩略图生成、图片过滤;今天就来介绍这两款特殊的下载器。
1305 0