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);
分享到:
相关推荐
8. **JThink-SkyEye**:压缩包中的"JThink-SkyEye-0cf93c1"可能是一个日志监控工具,可能包含了用于收集、分析和展示JVM上应用日志的功能。具体使用方法可能需要查阅其文档或源代码。 了解并掌握这些知识点,对于...
例如,你可以构建一个简单的爬虫来收集电商网站的商品价格、评论等信息,或者分析社交媒体平台上的用户行为数据。 结合Java开发环境,Scala Scraper可以通过JVM互操作性与Java代码无缝集成。尽管其本身是Scala库,...
1. **Scala 度量库**:metrics-scala 是一个用于 Scala 应用程序的度量收集库,可以帮助开发者监控应用程序的内存使用、线程状态、HTTP 请求延迟等关键性能指标。 2. **类路径扫描**:sclasner 是一个工具,能够...
文件类型包括386个Java源代码文件、115个Vue组件文件、103个SVG文件、91个JavaScript脚本文件、45个XML配置文件、28个PNG图片文件、11个VM文件、10个Idea项目文件和9个SCSS样式文件。该项目是一个商用产品开源,包括...
Scala是一种强大的多范式编程语言,它在大数据分析领域中有着广泛的应用。它结合了面向对象和函数式编程的特点,使得编写高效、...如果你想要深入理解Scala在大数据分析中的应用,研究这些示例代码将是一个很好的起点。
总的来说,Scala 2.12.15.tgz是一个为Java 8及以上平台优化的Scala版本,它提供了丰富的语言特性和工具,适用于构建现代、高性能的应用程序,尤其适合并发和分布式计算场景。通过学习和使用这个版本,开发者可以充分...
来自Scala教程源代码介绍Scala编程语言正在Swift普及! 遗憾的是,大多数在线教程都没有提供分步指南:( 在 ,我们提供给帮助你学习Scala小,操作简单,简单的步骤,一个初学者的教程。 教程的组织方式使您可以逐步...
【标题】"metrics-scala_2.9.2-2.1.5.zip" 提供的是 Metrics-Scala 库的一个版本,它是一个用于在 Scala 应用程序中收集和报告性能指标的框架。Metrics-Scala 是对 Java 版本的 Metrics 框架的扩展,使得在 Scala ...
该库的设计重点在于实现高性能、易于使用的接口,支持多种编程语言(如 Scala、Java 和 Python),并且具有高度的可扩展性和灵活性。 #### Spark MLlib 概述 - **特性**: - **分布式的机器学习算法**:Spark ...
Yammer Metrics是一个开源的Java库,用于收集和报告应用程序的各种运行时指标。它允许开发者轻松地在代码中插入各种度量,如计数器、定时器和仪表,以便监控应用的健康状况、性能和资源使用情况。"DataDog"是一个云...
和函数式编程一书中示例和测验的所有源代码。 您可以在这里购买这本书:或在亚马逊上 所有示例的源代码都可以在目录中找到 第 1 章:Java 8:你为什么要关心? 第 2 章:通过行为参数化传递代码 第 3 章:Lambda ...
"Java下的大数据分析程序.zip"可能包含一个项目或一系列用于执行大数据分析任务的Java代码。让我们深入探讨一下这个主题,了解如何在Java中进行大数据分析。 1. **Hadoop**: Hadoop是大数据分析的基础,它是一个...
"client_java,用于jvm应用程序的prometheus工具库.zip" 是一个包含Java客户端库的压缩包,该库使得Java开发者能够在JVM应用程序中轻松集成Prometheus监控功能。这个库不仅适用于纯Java应用,还兼容Clojure、Scala和...
Java源代码经过编译后生成.class文件,里面包含的是字节码。JVM通过类加载器加载这些字节码,将它们转换为运行时的类对象。类加载器分为引导类加载器、扩展类加载器和应用程序类加载器,遵循双亲委派模型,确保类...
通过阅读源代码,可以学习到如何将上述组件组合在一起,构建一个完整的推荐系统。此外,Oryx的文档和社区资源也是学习的重要途径,它们可以帮助你解决在使用过程中遇到的问题,以及进一步探索Oryx的功能和潜力。
JVM是一种抽象的计算环境,它负责解释和执行Java字节码,这是一种中间代码,由Java编译器将源代码编译而成。字节码的跨平台特性使得Java程序无需重新编译即可在任何支持JVM的设备上运行,实现了“一次编写,到处运行...
3. **创建Scala项目**: 使用提供的`build.sbt`文件初始化一个Scala项目。这可能是一个简单的SBT(Simple Build Tool)配置,用于定义项目的依赖项和构建设置。确保项目中包含了处理日志和与Logstash交互所需的库,如...
Action:Lambda,Streams和函数式编程》一书中的示例和测验的所有源代码。 您可以在这里购买抢先体验版: 我们非常希望听到您的反馈,并根据您的评论对本书进行改进! 所有示例的源代码都可以在目录中找到 第1章:...
Action:Lambda,Streams和函数式编程》一书中的示例和测验的所有源代码。 您可以在这里购买该书:或在亚马逊上 所有示例的源代码都可以在目录中找到 第1章:Java 8:您为什么要关心? 第2章:通过行为参数化传递...
这可能是一个包含了Loglog和Log4J应用程序源代码的目录,开发者可以解压并编译这个项目,以了解其内部工作原理,或者对其进行扩展和定制。 综合以上信息,我们可以得出以下知识点: 1. Twirl编译器是Scala的模板...