`
j2eetop
  • 浏览: 64420 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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

 
阅读更多
原来我的POM中groupId是org.tinygroup,artifactId是对应的工程名,如parser。
后出有一个处理上的原因,而且便于进行分隔,还可以避免与别人的冲突,想把所有的artifactId前面增加个“org.tinygroup.”前缀,比如parser就变成org.tinygroup.parser。但是这样一来,所有的依赖信息也全都对不上了,也就是要对工程的artifactId及依赖中的artifactId都进行修改才行。
由于工程数比较多,一个一个手工改总是麻烦的,因此就想着写程序进行处理。
实现方案1:
  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. private static void processFolder(File file1) throws Exception {
  7. File[] files = file1.listFiles();
  8. for (File file : files) {
  9. if (file.isDirectory()) {
  10. processFolder(file);
  11. }
  12. if (file.getName().equals("pom.xml")) {
  13. processPomFile(file);
  14. }
  15. }
  16. }

  17. private static void processPomFile(File file) throws Exception {
  18. System.out.println("processing:" + file.getAbsolutePath());
  19. XmlStringParser parser = new XmlStringParser();
  20. XmlDocument doc = parser.parse(IOUtils.readFromInputStream(new FileInputStream(file), "utf-8"));
  21. XmlNode dependencies = doc.getRoot().getSubNode("dependencies");
  22. XmlNode projectArtifactId = doc.getRoot().getSubNode("artifactId");
  23. projectArtifactId.setContent("org.tinygroup" + projectArtifactId.getContent().trim());
  24. if (dependencies != null) {
  25. List<XmlNode> dependencyList = dependencies.getSubNodes("dependency");
  26. if (dependencyList != null) {
  27. for (XmlNode node : dependencyList) {
  28. XmlNode groupId = node.getSubNode("groupId");
  29. if (groupId.getContent().trim().equals("org.tinygroup")) {
  30. XmlNode artifactId = node.getSubNode("artifactId");
  31. artifactId.setContent("org.tinygroup." + artifactId.getContent().trim());
  32. }
  33. }
  34. }
  35. }

  36. XmlFormater formater = new XmlFormater();
  37. IOUtils.writeToOutputStream(new FileOutputStream(file), formater.format(doc), "UTF-8");
  38. }
  39. }
复制代码
呵呵,程序运行一会,马上搞定了。
当然,这个时候,可能感觉还是有点麻烦,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. XmlFormater formater = new XmlFormater();
  25. IOUtils.writeToOutputStream(fileObject.getOutputStream(), formater.format(doc), "UTF-8");
  26. }
  27. });
  28. }
  29. }
复制代码
下面的xml格式化并输出到文件中,也可以写成:
  1. formater.format(doc,fileObject.getOutputStream();
复制代码
当然,上面只是临时进行一下处理,中间的Xml处理写得稍微丑陋一点。
分享到:
评论

相关推荐

    TinyXML2使用示例

    在“TinyXML2使用示例”中,我们可以通过提供的源代码和XML配置文件来了解如何使用TinyXML2进行XML操作。 首先,`CXMLCfg.cpp`、`CXMLCfg.h`文件很可能包含了TinyXML2的封装类或函数,用于简化XML文档的读取和写入...

    TinyOS: An Operating System for Sensor Networks

    We present TinyOS, a flexible, application-specific operating system for sensor networks. Sensor networks consist of (potentially) thousands of tiny, low-power nodes, each of which execute concurrent,...

    tinyxml在linux下动态库的使用示例代码

    在Linux环境下,如果我们需要将TinyXML作为动态库来使用,以实现更灵活的部署和节省资源,本示例代码将指导你如何进行操作。 首先,确保你已经下载了TinyXML的源代码。在Linux系统中,动态库的构建通常涉及以下步骤...

    TinyXML:一个优秀的C++ XML解析器

    TinyXML:一个优秀的C++ XML解析器

    tinyxml2源码及示例

    在Android开发中,TinyXML2可以用于处理配置文件、存储用户数据或进行数据交换。因为Android系统广泛使用XML格式来定义布局文件和资源,所以TinyXML2可以帮助开发者在运行时动态解析和生成XML内容。 在实际使用中,...

    tinyxml源代码,示例,教程

    `TinyXML入门教程.rar`可能包含了一系列示例程序,这些示例展示了如何使用TinyXML进行XML文档的加载、遍历、修改和保存。例如,如何创建一个新的XML文档,添加元素和属性,以及如何从已有的XML文件中提取数据。 4....

    RTX51-tiny学习建立的工程示例

    示例可能包含中断处理的代码,展示如何在ISR中正确使用RTOS功能。 6. **内存管理**: 虽然RTX51 Tiny内存需求较小,但依然需要有效管理。示例可能包含如何分配和释放内存的实例,以及如何避免内存泄漏。 7. **...

    TinyXML:基于DOM的XML解析器

    TinyXML遵循了Document Object Model (DOM)模型,这是一种处理XML文档的标准方式,允许开发者在内存中构建整个XML树,并对其进行遍历、修改或创建新的XML结构。 DOM模型将XML文档视为一系列节点,这些节点可以是...

    tinyxml在windows下的使用示例

    在这个Windows下的使用示例中,我们将深入探讨如何在Windows环境中集成和运用TinyXML来处理XML数据。 首先,你需要从TinyXML的官方网站或者GitHub仓库下载TinyXML库。下载完成后,将包含头文件(如`tinyxml.h`和`...

    RTX51 TINY 2.02 中文手册

    RTX51 TINY 2.02 中文手册知识点总结 本文档对 KEIL 公司的 RTX51 ...本文档对 RTX51 TINY 2.02 中的实时操作系统内核进行了详细的介绍和说明,帮助开发者和工程师快速了解和掌握 RTX51 TINY 2.02 的功能和使用方法。

    tinyxml与tinyxml2

    TinyXML是最初的版本,由Lee Stempel开发,它提供了一个轻量级的解决方案,用于在C++程序中处理XML文档。TinyXML的核心功能包括: 1. **解析XML文档**:TinyXML可以将XML文件解析成内存中的DOM(Document Object ...

    tinyxml2+示例代码+介绍文档

    TinyXML2是一个小型、快速且易于使用的XML解析库,它为C++程序员提供了处理XML文档的能力。这个资源包包括了2015年9月23日从官方网站获取的tinyxml2源码、作者编写的示例代码以及相关介绍文档。由于官方的示例和文档...

    提供一个NodeJS环境下基于TinyPNG服务的批量压缩任意数量图片的工具。

    本文将详细讨论如何在Node.js环境下,利用TinyPNG服务批量处理任意数量的图片压缩。 首先,我们需要理解Node.js的基本概念。Node.js是一个开放源代码、跨平台的JavaScript运行环境,它允许开发者在服务器端执行...

    TinyPng 批量压缩脚本,python重新编写(递归所有目录文件)

    TinyPng 批量压缩脚本,python重新编写(递归所有目录文件)

    图片批量压缩工具TinyPng

    在处理大量图片时, TinyPng提供了命令行接口(CLI)版本,使得用户可以通过编程方式实现批量压缩。在本文中,我们将深入探讨TinyPng的工作原理、使用方法以及如何在Node.js环境下配置和运行pngTinyfy这个批处理脚本...

    QT使用TinyXML开源库解析XML文件

    2. **添加TinyXML到QT项目**:将这些文件复制到你的QT项目的源代码目录中,或者在QT Creator中将它们包含为外部库。 3. **配置项目设置**:在QT Creator中,打开项目.pro文件,并在其中添加如下行以链接TinyXML库:...

    TinyPng:图片批量压缩脚本(Python)

    TinyPng作者微博:前言我们在写文章或者建网站时,经常需要对图片压缩处理,以便帮助用户节省流量和提升网站加载速度。图片压缩有很多方法,这里推荐的是。TinyPNG 是一个在线压缩工具,主要优点是在视觉上没有明显...

    tinyxml2最新版本(来自github)

    这个库由Steve Baker开发,它的最新版本在2017年8月17日更新,这表明了开发者持续对库进行维护和改进以适应不断变化的编程需求。在本文中,我们将深入探讨TinyXML2的核心功能、设计原则以及如何在实际项目中应用它。...

    tinyos 中文手册

    - **任务创建与调度**:通过SENSETASK应用程序,介绍如何在TinyOS中管理数据处理任务。 - **组件组合与无线通信**:CNTTORFMANDLEDS、INTTORFM等示例展示如何构建复杂的应用,并实现节点间的数据传输。 #### 四、...

Global site tag (gtag.js) - Google Analytics