《开源框架那些事儿2》:对整个目录中的POM树进行批量处理
下面是一个具体的案例,即对整个目录中的POM树进行批量处理 。
原来我的POM中groupId是org.tinygroup,artifactId是对应的工程名,如parser。
后出有一个处理上的原因,而且便于进行分隔,还可以避免与别人的冲突,想把所有的artifactId前面增加个“org.tinygroup.”前缀,比如parser就变成org.tinygroup.parser。但是这样一来,所有的依赖信息也全都对不上了,也就是要对工程的artifactId及依赖中的artifactId都进行修改才行。
由于工程数比较多,一个一个手工改总是麻烦的,因此就想着写程序进行处理。
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
7 private static void processFolder(File file1) throws Exception {
8 File[] files = file1.listFiles();
9 for (File file : files) {
10 if (file.isDirectory()) {
11 processFolder(file);
12 }
13 if (file.getName().equals("pom.xml")) {
14 processPomFile(file);
15 }
16 }
17 }
18
19 private static void processPomFile(File file) throws Exception {
20 System.out.println("processing:" + file.getAbsolutePath());
21 XmlStringParser parser = new XmlStringParser();
22 XmlDocument doc = parser.parse(IOUtils.readFromInputStream(new FileInputStream(file), "utf-8"));
23 XmlNode dependencies = doc.getRoot().getSubNode("dependencies");
24 XmlNode projectArtifactId = doc.getRoot().getSubNode("artifactId");
25 projectArtifactId.setContent("org.tinygroup" + projectArtifactId.getContent().trim());
26 if (dependencies != null) {
27 List<XmlNode> dependencyList = dependencies.getSubNodes("dependency");
28 if (dependencyList != null) {
29 for (XmlNode node : dependencyList) {
30 XmlNode groupId = node.getSubNode("groupId");
31 if (groupId.getContent().trim().equals("org.tinygroup")) {
32 XmlNode artifactId = node.getSubNode("artifactId");
33 artifactId.setContent("org.tinygroup." + artifactId.getContent().trim());
34 }
35 }
36 }
37 }
38
39 XmlFormater formater = new XmlFormater();
40 IOUtils.writeToOutputStream(new FileOutputStream(file), formater.format(doc), "UTF-8");
41 }
42}
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
7 private static void processFolder(File file1) throws Exception {
8 File[] files = file1.listFiles();
9 for (File file : files) {
10 if (file.isDirectory()) {
11 processFolder(file);
12 }
13 if (file.getName().equals("pom.xml")) {
14 processPomFile(file);
15 }
16 }
17 }
18
19 private static void processPomFile(File file) throws Exception {
20 System.out.println("processing:" + file.getAbsolutePath());
21 XmlStringParser parser = new XmlStringParser();
22 XmlDocument doc = parser.parse(IOUtils.readFromInputStream(new FileInputStream(file), "utf-8"));
23 XmlNode dependencies = doc.getRoot().getSubNode("dependencies");
24 XmlNode projectArtifactId = doc.getRoot().getSubNode("artifactId");
25 projectArtifactId.setContent("org.tinygroup" + projectArtifactId.getContent().trim());
26 if (dependencies != null) {
27 List<XmlNode> dependencyList = dependencies.getSubNodes("dependency");
28 if (dependencyList != null) {
29 for (XmlNode node : dependencyList) {
30 XmlNode groupId = node.getSubNode("groupId");
31 if (groupId.getContent().trim().equals("org.tinygroup")) {
32 XmlNode artifactId = node.getSubNode("artifactId");
33 artifactId.setContent("org.tinygroup." + artifactId.getContent().trim());
34 }
35 }
36 }
37 }
38
39 XmlFormater formater = new XmlFormater();
40 IOUtils.writeToOutputStream(new FileOutputStream(file), formater.format(doc), "UTF-8");
41 }
42}
实现方案1:
-
呵呵,程序运行一会,马上搞定了。
当然,这个时候,可能感觉还是有点麻烦,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
25 XmlFormater formater = new XmlFormater();
26 IOUtils.writeToOutputStream(fileObject.getOutputStream(), formater.format(doc), "UTF-8");
27 }
28 });
29 }
30}
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
25 XmlFormater formater = new XmlFormater();
26 IOUtils.writeToOutputStream(fileObject.getOutputStream(), formater.format(doc), "UTF-8");
27 }
28 });
29 }
30}
1
formater.format(doc,fileObject.getOutputStream();
欢迎访问框架论坛:http://web.j2ee.top。本例涉及的代码和框架资料,将会在论坛分享。《自己动手写框架》成员QQ群:228977971,让我们一起动手,了解框架的奥秘!