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


相关文章
|
机器学习/深度学习 数据格式 XML
模块DNN文件的版本记录和resource文件
做个笔记,就不详细讲了:  对模块的DNN XML 文件,有两个节点,一个是 ^[0-9]{1}[4-9]{1}.[0-9]{1}[6-9]{1}.[0-9]{1}[0-9]{1}$   这里可以用正则表达式指定模块兼容的版本,具体请参考:Minimum DotNetNuke Core Version Support 一个是: DNN_Announcements.
578 0
|
自然语言处理 算法 固态存储
NonCompressibleFiles -- 空文件夹生成器
其功用在于产生测试用途的指定大小文件(最大单个10G),并且可以指定为不可压缩文件(压缩后体积不会发生变化)或最大可压缩文件格式(测试生成一个100M文件压缩为55KB),快速产生各种不同大小的测试文件
201 0
|
机器学习/深度学习 前端开发 .NET
如何在DNN模块中插入一个图片--在模块中引用资源文件
DNN永远都是运行在网站的根目录 DNN的设计上最大的特点就是始终是使用一个网站根目录下的Default.aspx文件加载皮肤和模块从而实现整个网站的页面。这也就是说DNN这个Asp.net程序永远是运行在DNN网站的根目录的,所有的资源文件(如:JS文件,图片,CSS)的引用都要从DNN网站的根目录算起。
830 0
|
存储 数据采集 Python
scrapy自带文件下载器,实现多层级目录结构的存储
概scrapy既然是一款强大的爬虫框架,自然也实现了图片和文件的下载,FilesPipeline、ImagesPipeline分别是图片和文件的下载器,image也是文件的一种为什么还要单独提供一个image下载器?这是因为图片下载器还提供了一些额外方法:缩略图生成、图片过滤;今天就来介绍这两款特殊的下载器。
1406 0
|
存储 Python
Python怎样统计文件夹(包括子文件夹)中文件的个数?
本文介绍基于Python语言,统计文件夹中文件数量;若其含有子文件夹,还将对各子文件夹中的文件数量一并进行统计的方法~
570 1
|
测试技术 Python
一日一技:导入父文件夹中的模块并读取当前文件夹内的资源
一日一技:导入父文件夹中的模块并读取当前文件夹内的资源
147 0
|
存储 缓存 Java
《Gradle构建脚本的基本结构和语法》
《Gradle构建脚本的基本结构和语法》
159 0
|
Java Android开发 索引
一步一步学lucene——(第二步:示例篇)
在上面的篇幅中我们已经了解到了lucene,及lucene到底是做什么的,什么情况下才能够使用lucene,下面我们就结合一个例子来详细说明一下lucene的API,看看lucene是如何工作的。 lucene的下载 其实这个很简单了,直接到baidu或者google上搜索一下,一般情况下第一个就是我们要的链接。
815 0
|
9月前
POM文件总体配置说明
POM文件总体配置说明
129 0
|
前端开发 Java Linux
将源码合并成一个文件
  最近忙着申请专利的事情.碰到一个问题就是将所有代码合并成一个word文件.可以通过以下2中脚本来实现.
1134 0

热门文章

最新文章