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);
分享到:
相关推荐
文件类型包括386个Java源代码文件、115个Vue组件文件、103个SVG文件、91个JavaScript脚本文件、45个XML配置文件、28个PNG图片文件、11个VM文件、10个Idea项目文件和9个SCSS样式文件。该项目是一个商用产品开源,包括...
来自Scala教程源代码介绍Scala编程语言正在Swift普及! 遗憾的是,大多数在线教程都没有提供分步指南:( 在 ,我们提供给帮助你学习Scala小,操作简单,简单的步骤,一个初学者的教程。 教程的组织方式使您可以逐步...
和函数式编程一书中示例和测验的所有源代码。 您可以在这里购买这本书:或在亚马逊上 所有示例的源代码都可以在目录中找到 第 1 章:Java 8:你为什么要关心? 第 2 章:通过行为参数化传递代码 第 3 章:Lambda ...
Action:Lambda,Streams和函数式编程》一书中的示例和测验的所有源代码。 您可以在这里购买抢先体验版: 我们非常希望听到您的反馈,并根据您的评论对本书进行改进! 所有示例的源代码都可以在目录中找到 第1章:...
Action:Lambda,Streams和函数式编程》一书中的示例和测验的所有源代码。 您可以在这里购买该书:或在亚马逊上 所有示例的源代码都可以在目录中找到 第1章:Java 8:您为什么要关心? 第2章:通过行为参数化传递...
和函数式编程一书中示例和测验的所有源代码。 您可以在这里购买这本书:或在亚马逊上 所有示例的源代码都可以在目录中找到 第 1 章:Java 8:你为什么要关心? 第 2 章:通过行为参数化传递代码 第 3 章:Lambda ...
和函数式编程一书中示例和测验的所有源代码。 您可以在这里购买这本书:或在亚马逊上 所有示例的源代码都可以在目录中找到 第 1 章:Java 8:你为什么要关心? 第 2 章:通过行为参数化传递代码 第 3 章:Lambda ...
和函数式编程一书中示例和测验的所有源代码。 您可以在这里购买这本书:或在亚马逊上 所有示例的源代码都可以在目录中找到 第 1 章:Java 8:你为什么要关心? 第 2 章:通过行为参数化传递代码 第 3 章:Lambda ...
一书中的源代码。 同时自己也做了一些扩展使用,修复了源码中的bug。 例如 Java 8 In Action 中的源代码可以在目录中找到: 第 1 章 Java 8:你为什么要关心? 第 2 章 使用行为参数化传递代码 第 3 章 Lambda ...
和函数式编程一书中示例和测验的所有源代码。 您可以在这里购买这本书:或在亚马逊上 所有示例的源代码都可以在目录中找到 第 1 章:Java 8:你为什么要关心? 第 2 章:通过行为参数化传递代码 第 3 章:Lambda ...
和函数式编程一书中示例和测验的所有源代码。 您可以在这里购买这本书:或在亚马逊上 所有示例的源代码都可以在目录中找到 第 1 章:Java 8:你为什么要关心? 第 2 章:通过行为参数化传递代码 第 3 章:Lambda ...
和函数式编程一书中示例和测验的所有源代码。 您可以在这里购买这本书:或在亚马逊上 所有示例的源代码都可以在目录中找到 第 1 章:Java 8:你为什么要关心? 第 2 章:通过行为参数化传递代码 第 3 章:Lambda ...
和函数式编程一书中示例和测验的所有源代码。 您可以在这里购买这本书:或在亚马逊上 所有示例的源代码都可以在目录中找到 第 1 章:Java 8:你为什么要关心? 第 2 章:通过行为参数化传递代码 第 3 章:Lambda ...
和函数式编程一书中示例和测验的所有源代码。 您可以在这里购买这本书:或在亚马逊上 所有示例的源代码都可以在目录中找到 第 1 章:Java 8:你为什么要关心? 第 2 章:通过行为参数化传递代码 第 3 章:Lambda ...
和函数式编程一书中示例和测验的所有源代码。 您可以在此处购买抢先体验: 我们非常渴望听到您的反馈并根据您的评论改进本书! 所有示例的源代码都可以在目录中找到 第 1 章:Java 8:你为什么要关心? 第 2 章:...
和函数式编程一书中示例和测验的所有源代码。 您可以在这里购买这本书:或在亚马逊上 所有示例的源代码都可以在目录中找到 第 1 章:Java 8:你为什么要关心? 第 2 章:通过行为参数化传递代码 第 3 章:Lambda ...
和函数式编程一书中示例和测验的所有源代码。 您可以在这里购买这本书:或在亚马逊上 所有示例的源代码都可以在目录中找到 第 1 章:Java 8:你为什么要关心? 第 2 章:通过行为参数化传递代码 第 3 章:Lambda ...
和函数式编程一书中示例和测验的所有源代码。 您可以在这里购买这本书:或在亚马逊上 所有示例的源代码都可以在目录中找到 第 1 章:Java 8:你为什么要关心? 第 2 章:通过行为参数化传递代码 第 3 章:Lambda ...