特定のクラスを格納している JAR ファイルを発見するgroovyスクリプト 2007/08/18


特定のクラスを格納している 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$', '') }";
}
});
}



以下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使えたらうれしいかもしれない。

関連

: