Tiny示例:对整个目录中的POM树进行批量处理
2015-06-02 11:06
120 查看
原来我的POM中groupId是org.tinygroup,artifactId是对应的工程名,如parser。
后出有一个处理上的原因,而且便于进行分隔,还可以避免与别人的冲突,想把所有的artifactId前面增加个“org.tinygroup.”前缀,比如parser就变成org.tinygroup.parser。但是这样一来,所有的依赖信息也全都对不上了,也就是要对工程的artifactId及依赖中的artifactId都进行修改才行。
由于工程数比较多,一个一个手工改总是麻烦的,因此就想着写程序进行处理。
实现方案1:
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,再换一种写法:
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格式化并输出到文件中,也可以写成:
formater.format(doc,fileObject.getOutputStream();
复制代码
当然,上面只是临时进行一下处理,中间的Xml处理写得稍微丑陋一点。
后出有一个处理上的原因,而且便于进行分隔,还可以避免与别人的冲突,想把所有的artifactId前面增加个“org.tinygroup.”前缀,比如parser就变成org.tinygroup.parser。但是这样一来,所有的依赖信息也全都对不上了,也就是要对工程的artifactId及依赖中的artifactId都进行修改才行。
由于工程数比较多,一个一个手工改总是麻烦的,因此就想着写程序进行处理。
实现方案1:
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,再换一种写法:
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格式化并输出到文件中,也可以写成:
formater.format(doc,fileObject.getOutputStream();
复制代码
当然,上面只是临时进行一下处理,中间的Xml处理写得稍微丑陋一点。
相关文章推荐
- AspNet MVC4 教学-22:Asp.Net MVC4 Partial View 技术快速应用Demo
- javascript深入理解js闭包
- 开源协议
- solr特点三: 排序样例汇总
- 【转】【Taven.李锡远】敏捷开发之Scrum扫盲篇
- MySQL性能优化的21个最佳实践 和 mysql使用索引
- CentOS 6.4中升级编译安装GCC 4.8.1 + GDB 7.6.1 + Eclipse 以及Kdump配置
- 九度OJ-题目1385:重建二叉树
- AndroidManifest.xml文件详解(service)
- 常用GDI函数(2):绘制文本
- awk取出指定某天的慢日志(mysql)并使用工具分析
- 策略模式
- linux下搭建SVN服务器
- sizeof 求类的大小
- 3Sum Closest
- SVN 中trunk、tags、branches使用
- JS跳转到另一地址
- Node.js缓冲器
- 我们从工程项目中学习什么?
- Vim学习笔记--复制粘贴