ant task jarjar
2007/03/20
ant
java
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>
: