Java:jarをつくるためのAntのbuild.xmlの書き方(1)
きよツール配布目指して調査中。メモなのでぜんぜん体系的じゃない。
build.xml
こんな感じで書くといいらしい
<?xml version="1.0" encoding="UTF-8"?> <project name="sample" default="main"> <target name="main" depends="javac, jar"> <echo> .jar created. </echo> </target> <target name="javac"> <javac srcdir="." encoding="utf-8" includeantruntime="false" /> </target> <target name="jar"> <jar jarfile="sample.jar" basedir="." includes="*.class"> <manifest> <attribute name="Main-Class" value="Main" /> </manifest> </jar> </target> </project>
- トップレベルはprojectで、target (Antがやる個々の仕事かな?) からデフォルトで起動するものを書く
- javacにencodingを渡すとUTF-8とかにできる
- jarの下にmanifestタグ階層を作ると、jarに収納されるmanifest.MFの中身を書き足せる
- それぞれの項目をattributeタグの属性、ネームバリューに書いてく
- Main-Classにエントリーポイントがあるクラス名を書く。書かないとどのクラスから起動させるのかわからない
といった感じ。それと、javacのincludeantruntime属性がないとAntが警告出してくるけど、これをなくすために以下のサイトの記述を参考にさせて頂いた。
includeantruntimeは、Antのランタイムライブラリをクラスパスに含むかという設定らしく、これがデフォルトでtrueらしい。
Ant 1.8から出るincludeAntRuntimeに関するワーニング - epian-wiki
(中略)
結局の所、javacタスクにincludeantruntime="false"を設定するだけで良いのだが
サンプル用Javaも適当に
import javax.swing.*; class Main { public static void main(String[] args) { JFrame win = new JFrame("sample"); win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); win.add(new JLabel("Hello, World.")); win.pack(); win.setVisible(true); } }
実際にビルドするには
buildとMainのパスに移動して
ant
って打つだけ。
実行結果
%cwdにはcurrent working directory入る
%cwd%>ant ant Buildfile: %cwd%\build.xml javac: jar: [jar] Building jar: %cwd%\sample.jar main: [echo] [echo] .jar created. [echo] BUILD SUCCESSFUL Total time: 0 seconds
取りあえずここまで。あと目標2点
- Eclipseで作ったプロジェクトまるっとビルド
- 難読化を仕込む
などは続きのエントリーで順次書いていくつもり。