`
kidneyball
  • 浏览: 327091 次
  • 性别: Icon_minigender_1
  • 来自: 南太平洋
社区版块
存档分类
最新评论

一个搜集java源代码的scala程序

 
阅读更多
jboss的源代码目录太零碎了,写了一个Scala脚本,搜索多个源目录,把java文件按包名路径复制到统一目录下。方便调试时绑定源码。

package net.danieldeng.sourceextractor
import scala.io.Source
import java.io._;
import org.apache.commons.io.FileUtils

object SourceExtractor {
  val PackagePattern = """^\s*package\s+(.+?)\s*;\s*$""".r;
  
  def help = {
    print(
        """
SourceExtractor <option> source_directory_1 source_directory_2 ... 

Options:
  -d <destination> : Specify destination directory
  -c <codec charset> : Charset used by source files. Default UTF-8.
  -h : Show this help information."""
    );
  }

  def parseArg(args: Array[String]): Config = {
    val config = new Config(List(), null, "UTF-8");
    def parse(argList: List[String]): Unit = {
      argList match {
        case "-d" :: dest :: xs => config.destDir = dest; parse(xs);
        case "-c" :: charset :: xs => config.codec = charset; parse(xs);
        case "-h" :: xs => help;exit;
        case source :: xs => config.srcDir = (source :: config.srcDir).reverse; parse(xs);
        case List() => ;
      }
    }
    parse(List(args: _*));
    return config;
  }

  private def copy(f: File, packageName: String, dest: String) {
    val path = dest + File.separator + packageName.replaceAllLiterally(""".""", File.separator);
    val dir = prepareDir(path);
    FileUtils.copyFileToDirectory(f, dir);
  }

  private def prepareDir(path: String): File =
    new File(path) match {
      case dest if !(dest exists) => if (dest.mkdirs) dest else throw new IOException("Cannot create directory " + path);
      case dest if !(dest isDirectory) => throw new IllegalArgumentException(path + " is not a directory");
      case dest => dest;
    };

  def main(args: Array[String]): Unit = {
    val config = parseArg(args);
    val dest = prepareDir(config.destDir);
    config.srcDir.foreach(
      src => {
        val it = FileUtils.iterateFiles(new File(src), Array("java"), true);
        while (it.hasNext) {
          val f = it.next;
          val source = Source.fromFile(f, config.codec);
          try {
            source.getLines().find(_ match {
              case PackagePattern(packageName) =>
                {
                  copy(f, packageName, dest.getAbsolutePath);
                  true
                };
              case _ => false;
            });
          } finally {
            source.close();
          }
        }
      });
  }
}

class Config(
  var srcDir: List[String],
  var destDir: String,
  var codec: String);


0
2
分享到:
评论

相关推荐

    基于Java和Vue的用户行为分析画像系统设计源码

    文件类型包括386个Java源代码文件、115个Vue组件文件、103个SVG文件、91个JavaScript脚本文件、45个XML配置文件、28个PNG图片文件、11个VM文件、10个Idea项目文件和9个SCSS样式文件。该项目是一个商用产品开源,包括...

    scala-cheatsheet:http的源代码

    来自Scala教程源代码介绍Scala编程语言正在Swift普及! 遗憾的是,大多数在线教程都没有提供分步指南:( 在 ,我们提供给帮助你学习Scala小,操作简单,简单的步骤,一个初学者的教程。 教程的组织方式使您可以逐步...

    java8stream源码-Java8source:Java8源代码

    和函数式编程一书中示例和测验的所有源代码。 您可以在这里购买这本书:或在亚马逊上 所有示例的源代码都可以在目录中找到 第 1 章:Java 8:你为什么要关心? 第 2 章:通过行为参数化传递代码 第 3 章:Lambda ...

    action源码java-road.to.java8.master:该代码基于Java8inAction及其源代码

    Action:Lambda,Streams和函数式编程》一书中的示例和测验的所有源代码。 您可以在这里购买抢先体验版: 我们非常希望听到您的反馈,并根据您的评论对本书进行改进! 所有示例的源代码都可以在目录中找到 第1章:...

    action源码java-Java8InAction-1:源代码

    Action:Lambda,Streams和函数式编程》一书中的示例和测验的所有源代码。 您可以在这里购买该书:或在亚马逊上 所有示例的源代码都可以在目录中找到 第1章:Java 8:您为什么要关心? 第2章:通过行为参数化传递...

    java8stream源码-java8__:在Java中练习“现代Java实战”示例的代码

    和函数式编程一书中示例和测验的所有源代码。 您可以在这里购买这本书:或在亚马逊上 所有示例的源代码都可以在目录中找到 第 1 章:Java 8:你为什么要关心? 第 2 章:通过行为参数化传递代码 第 3 章:Lambda ...

    java8stream源码-Java8InAction:Java8上的示例代码和项目

    和函数式编程一书中示例和测验的所有源代码。 您可以在这里购买这本书:或在亚马逊上 所有示例的源代码都可以在目录中找到 第 1 章:Java 8:你为什么要关心? 第 2 章:通过行为参数化传递代码 第 3 章:Lambda ...

    java8stream源码-java8_in_action:“java8inaction”研究的示例代码

    和函数式编程一书中示例和测验的所有源代码。 您可以在这里购买这本书:或在亚马逊上 所有示例的源代码都可以在目录中找到 第 1 章:Java 8:你为什么要关心? 第 2 章:通过行为参数化传递代码 第 3 章:Lambda ...

    java8stream源码-java8:Java8——函数式编程

    一书中的源代码。 同时自己也做了一些扩展使用,修复了源码中的bug。 例如 Java 8 In Action 中的源代码可以在目录中找到: 第 1 章 Java 8:你为什么要关心? 第 2 章 使用行为参数化传递代码 第 3 章 Lambda ...

    java8stream源码-Java8:Java8

    和函数式编程一书中示例和测验的所有源代码。 您可以在这里购买这本书:或在亚马逊上 所有示例的源代码都可以在目录中找到 第 1 章:Java 8:你为什么要关心? 第 2 章:通过行为参数化传递代码 第 3 章:Lambda ...

    java8stream源码-JavaTraining:Java培训

    和函数式编程一书中示例和测验的所有源代码。 您可以在这里购买这本书:或在亚马逊上 所有示例的源代码都可以在目录中找到 第 1 章:Java 8:你为什么要关心? 第 2 章:通过行为参数化传递代码 第 3 章:Lambda ...

    java8stream源码-java8:java8

    和函数式编程一书中示例和测验的所有源代码。 您可以在这里购买这本书:或在亚马逊上 所有示例的源代码都可以在目录中找到 第 1 章:Java 8:你为什么要关心? 第 2 章:通过行为参数化传递代码 第 3 章:Lambda ...

    java8stream源码-git-flow-practise:git-flow-练习

    和函数式编程一书中示例和测验的所有源代码。 您可以在这里购买这本书:或在亚马逊上 所有示例的源代码都可以在目录中找到 第 1 章:Java 8:你为什么要关心? 第 2 章:通过行为参数化传递代码 第 3 章:Lambda ...

    java8stream源码-java8InAction:java8InAction

    和函数式编程一书中示例和测验的所有源代码。 您可以在这里购买这本书:或在亚马逊上 所有示例的源代码都可以在目录中找到 第 1 章:Java 8:你为什么要关心? 第 2 章:通过行为参数化传递代码 第 3 章:Lambda ...

    java8stream源码-lambdasinaction:java8在行动

    和函数式编程一书中示例和测验的所有源代码。 您可以在此处购买抢先体验: 我们非常渴望听到您的反馈并根据您的评论改进本书! 所有示例的源代码都可以在目录中找到 第 1 章:Java 8:你为什么要关心? 第 2 章:...

    java8stream源码-lambdasinaction:java8新特性

    和函数式编程一书中示例和测验的所有源代码。 您可以在这里购买这本书:或在亚马逊上 所有示例的源代码都可以在目录中找到 第 1 章:Java 8:你为什么要关心? 第 2 章:通过行为参数化传递代码 第 3 章:Lambda ...

    java8stream源码-modernjava:在操作代码中使用现代Java

    和函数式编程一书中示例和测验的所有源代码。 您可以在这里购买这本书:或在亚马逊上 所有示例的源代码都可以在目录中找到 第 1 章:Java 8:你为什么要关心? 第 2 章:通过行为参数化传递代码 第 3 章:Lambda ...

    java8stream源码-kimmisun:金米顺

    和函数式编程一书中示例和测验的所有源代码。 您可以在这里购买这本书:或在亚马逊上 所有示例的源代码都可以在目录中找到 第 1 章:Java 8:你为什么要关心? 第 2 章:通过行为参数化传递代码 第 3 章:Lambda ...

Global site tag (gtag.js) - Google Analytics