プログラマメモ2 - programmer no memo2

ant task jarjar 2007/03/20

Why Tonic? - Quality, Features and Price

googleのguiceのbuild.xmlを眺めていて、jarjarというタスクをみつけた。

<jarjar jarfile="${build.dir}/dist/guice-${version}.jar">
<fileset dir="${build.dir}/classes"/>
<zipfileset src="lib/build/cglib-nodep-2.2_beta1.jar"/>
<zipfileset src="lib/build/asm-3.0.jar"/>
<rule pattern="net.sf.cglib.**" result="com.google.inject.cglib.@1"/>
<rule pattern="org.objectweb.asm.**" result="com.google.inject.asm.@1"/>
</jarjar>s

ここで、ruleというのがあり奇妙で

はてこれはなんだろうなと思い調べてみたら便利そうなので、メモ。

参考:
http://rektunpe.sakura.ne.jp/diary/?date=20060127

なにやら依存パッケージをjarにとりこめることができるらしい。
ここまでなら、他にもツールがあるので、特筆するほどでもないなぁと思ったのですが、
さらにその先にいっていて、依存パッケージの名前を変更して、jarにとりこめる!!

このant taskは
ここのWhy Tonic? - Quality, Features and Priceようです。

実験してたしかにとりこまれているのを確認しました。

jakarta commonsのlangを利用するソースを書いて、build.xmlを用意して、できたjarを解体して、jadでデコンパイルしてみたらものの見事にかわっていました。

参考に作成したbuild.xmlファイル


<?xml version="1.0" encoding="UTF-8"?>
<project name="research" default="compile" basedir=".">
<property name="version" value="0.0.3"/>
<property name="build.dir" value="build"/>
<property name="lib.dir" value="lib"/>
<property name="src.dir" value="src-string"/>

<path id="compile.classpath">
<fileset dir="${lib.dir}" includes="*.jar"/>
</path>

<target name="jar" depends="compile" description="Build jar!!">
<taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask"
classpath="lib/jarjar-0.9.jar"/>
<mkdir dir="${build.dir}/dist"/>
<jarjar jarfile="${build.dir}/dist/myteset-${version}.jar">
<fileset dir="${build.dir}/classes"/>
<zipfileset src="lib/commons-lang-2.3.jar"/>
<rule pattern="org.apache.commons.lang.**" result="newpackage.@1"/>
</jarjar>
</target>

<target name="compile" description="Compile Java source!!">
<mkdir dir="${build.dir}/classes"/>
<javac srcdir="${src.dir}" debug="on" destdir="${build.dir}/classes">
<classpath refid="compile.classpath"/>
</javac>
<copy toDir="${build.dir}/classes">
<fileset dir="${src.dir}" excludes="**/*.java"/>
</copy>
</target>
</project>

: