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.
581 0
|
XML 存储 数据格式
基于大量文件的名称特征自动新建多个文件夹并自动复制对应文件:Python
本文介绍基于Python,对一个文件夹下大量栅格影像,基于其各自文件名,分别创建指定名称的新文件夹,并将对应影像文件复制到不同的新文件夹下的方法。
165 3
基于大量文件的名称特征自动新建多个文件夹并自动复制对应文件:Python
|
机器学习/深度学习 前端开发 .NET
如何在DNN模块中插入一个图片--在模块中引用资源文件
DNN永远都是运行在网站的根目录 DNN的设计上最大的特点就是始终是使用一个网站根目录下的Default.aspx文件加载皮肤和模块从而实现整个网站的页面。这也就是说DNN这个Asp.net程序永远是运行在DNN网站的根目录的,所有的资源文件(如:JS文件,图片,CSS)的引用都要从DNN网站的根目录算起。
833 0
|
Java Android开发 索引
一步一步学lucene——(第二步:示例篇)
在上面的篇幅中我们已经了解到了lucene,及lucene到底是做什么的,什么情况下才能够使用lucene,下面我们就结合一个例子来详细说明一下lucene的API,看看lucene是如何工作的。 lucene的下载 其实这个很简单了,直接到baidu或者google上搜索一下,一般情况下第一个就是我们要的链接。
815 0
|
存储 Python
Python怎样统计文件夹(包括子文件夹)中文件的个数?
本文介绍基于Python语言,统计文件夹中文件数量;若其含有子文件夹,还将对各子文件夹中的文件数量一并进行统计的方法~
576 1
|
XML 机器学习/深度学习 数据格式
DNN Navisuite菜单模块原始XML文件的格式
DNN 比较好用的一个菜单模块式Navsuite模块,这个模块因为使用XML+XSL的技术手段,可以灵活的生成各种各样的菜单样式。 你可以通过修改style目录下的xsl文件来创建自己的菜单样式,但有一个问题是这个模块没有非常详细的手册,生成的XML是什么格式我们并不熟悉,我这里把生成的XML贴出来给大家参考。
838 0
|
存储
问题 A: DS树--带权路径和
问题 A: DS树--带权路径和
|
前端开发 开发工具 计算机视觉
30行代码实现合并指定目录下的所有文件的内容
30行代码实现合并指定目录下的所有文件的内容