`
kidneyball
  • 浏览: 328985 次
  • 性别: 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
分享到:
评论

相关推荐

    对javascala等运行于jvm的程序进行实时日志采集

    8. **JThink-SkyEye**:压缩包中的"JThink-SkyEye-0cf93c1"可能是一个日志监控工具,可能包含了用于收集、分析和展示JVM上应用日志的功能。具体使用方法可能需要查阅其文档或源代码。 了解并掌握这些知识点,对于...

    ScalaScraper一个Scala库用于HTML页面抽取内容

    例如,你可以构建一个简单的爬虫来收集电商网站的商品价格、评论等信息,或者分析社交媒体平台上的用户行为数据。 结合Java开发环境,Scala Scraper可以通过JVM互操作性与Java代码无缝集成。尽管其本身是Scala库,...

    metrics-scala_2.10-3.1.0_a2.3.zip

    1. **Scala 度量库**:metrics-scala 是一个用于 Scala 应用程序的度量收集库,可以帮助开发者监控应用程序的内存使用、线程状态、HTTP 请求延迟等关键性能指标。 2. **类路径扫描**:sclasner 是一个工具,能够...

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

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

    Scala的大数据分析代码

    Scala是一种强大的多范式编程语言,它在大数据分析领域中有着广泛的应用。它结合了面向对象和函数式编程的特点,使得编写高效、...如果你想要深入理解Scala在大数据分析中的应用,研究这些示例代码将是一个很好的起点。

    scala-2.12.15.tgz

    总的来说,Scala 2.12.15.tgz是一个为Java 8及以上平台优化的Scala版本,它提供了丰富的语言特性和工具,适用于构建现代、高性能的应用程序,尤其适合并发和分布式计算场景。通过学习和使用这个版本,开发者可以充分...

    scala-cheatsheet:http的源代码

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

    metrics-scala_2.9.2-2.1.5.zip

    【标题】"metrics-scala_2.9.2-2.1.5.zip" 提供的是 Metrics-Scala 库的一个版本,它是一个用于在 Scala 应用程序中收集和报告性能指标的框架。Metrics-Scala 是对 Java 版本的 Metrics 框架的扩展,使得在 Scala ...

    SparkML算法详解(关于DataFrame的API操作)--数据挖掘(Scala与Java版)

    该库的设计重点在于实现高性能、易于使用的接口,支持多种编程语言(如 Scala、Java 和 Python),并且具有高度的可扩展性和灵活性。 #### Spark MLlib 概述 - **特性**: - **分布式的机器学习算法**:Spark ...

    scalasti_2.10-2.0.0.zip

    Yammer Metrics是一个开源的Java库,用于收集和报告应用程序的各种运行时指标。它允许开发者轻松地在代码中插入各种度量,如计数器、定时器和仪表,以便监控应用的健康状况、性能和资源使用情况。"DataDog"是一个云...

    java8stream源码-Java8source:Java8源代码

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

    Java下的大数据分析程序.zip

    "Java下的大数据分析程序.zip"可能包含一个项目或一系列用于执行大数据分析任务的Java代码。让我们深入探讨一下这个主题,了解如何在Java中进行大数据分析。 1. **Hadoop**: Hadoop是大数据分析的基础,它是一个...

    client_java,用于jvm应用程序的prometheus工具库.zip

    "client_java,用于jvm应用程序的prometheus工具库.zip" 是一个包含Java客户端库的压缩包,该库使得Java开发者能够在JVM应用程序中轻松集成Prometheus监控功能。这个库不仅适用于纯Java应用,还兼容Clojure、Scala和...

    实战JAVA虚拟机

    Java源代码经过编译后生成.class文件,里面包含的是字节码。JVM通过类加载器加载这些字节码,将它们转换为运行时的类对象。类加载器分为引导类加载器、扩展类加载器和应用程序类加载器,遵循双亲委派模型,确保类...

    开源推荐系统Oryx1.0源代码

    通过阅读源代码,可以学习到如何将上述组件组合在一起,构建一个完整的推荐系统。此外,Oryx的文档和社区资源也是学习的重要途径,它们可以帮助你解决在使用过程中遇到的问题,以及进一步探索Oryx的功能和潜力。

    1.JVM与Java体系结构

    JVM是一种抽象的计算环境,它负责解释和执行Java字节码,这是一种中间代码,由Java编译器将源代码编译而成。字节码的跨平台特性使得Java程序无需重新编译即可在任何支持JVM的设备上运行,实现了“一次编写,到处运行...

    scala通过logstash发送日志到kafka的Demo

    3. **创建Scala项目**: 使用提供的`build.sbt`文件初始化一个Scala项目。这可能是一个简单的SBT(Simple Build Tool)配置,用于定义项目的依赖项和构建设置。确保项目中包含了处理日志和与Logstash交互所需的库,如...

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

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

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

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

    twirl-compiler_2.10-1.0.1.zip

    这可能是一个包含了Loglog和Log4J应用程序源代码的目录,开发者可以解压并编译这个项目,以了解其内部工作原理,或者对其进行扩展和定制。 综合以上信息,我们可以得出以下知识点: 1. Twirl编译器是Scala的模板...

Global site tag (gtag.js) - Google Analytics