特定のクラスを格納している JAR ファイルを発見するgroovyスクリプト
2007/08/18
groovy
ruby
特定のクラスを格納している JAR ファイルを発見するRubyスクリプトを公開している人がいたので、勉強をかねて、groovyにしてみました。
オリジナルのほうはjarコマンドを使用してjarの中のエントリーから見つけ出したいクラスをひっぱてきていましたが、どうせgroovyにするならばというわけで、JarFileクラスを使用してみました。
ちょっと調べきれていないのが、groovyでtoStringしなくてもすむならtoStringしないで文字列で取り扱う方法ですかね。
import java.util.jar.JarFile;
if(this.args.length < 2){
println "Usage: findjar.groovy [classname] [dirname]"
System.exit(0);
}
def classname = args[0]
def dirname = args[1]
classname = classname.replaceAll("¥¥.", "/")
new File(dirname).eachFileMatch(~".*.jar" ){
jarfile ->
new JarFile(jarfile).entries().each({ line ->
if(line.toString().contains(classname)){
println "${jarfile}:${line.toString().replaceAll('/', '¥¥.').replaceFirst('¥¥.class$', '') }";
}
});
}
if(this.args.length < 2){
println "Usage: findjar.groovy [classname] [dirname]"
System.exit(0);
}
def classname = args[0]
def dirname = args[1]
classname = classname.replaceAll("¥¥.", "/")
new File(dirname).eachFileMatch(~".*.jar" ){
jarfile ->
new JarFile(jarfile).entries().each({ line ->
if(line.toString().contains(classname)){
println "${jarfile}:${line.toString().replaceAll('/', '¥¥.').replaceFirst('¥¥.class$', '') }";
}
});
}
以下Rubyについてのメモです。
------
rubyのgsubは
gsub(pattern, replace)
らしい。
Dir.glob(pattern)
は、パターンにマッチしたファイルを取得するものらしい。ない場合は空の配列を返す。
パターンにマッチするファイルがない場合は空の配列を返します。
rubyのString#chompは、
文字列の末端の改行を削除します。
逆引きRuby - 文字列
if 文字列.include? other
end
という感じなる。
文字列にそれ含んでる?という問いかけになる感じ。
rubyのinclude?(other) は、
other が範囲内に含まれている時に真を返すらしい。
--
groovyもjava同様、配列の長さをlenghtで、Listの長さはsizeでとれるのですが、
両方でlength,size使えたらうれしいかもしれない。
関連
: