<?xml version="1.0" encoding="UTF-8" standalone="no"?> <project default="create_run_jar" name="Create Runnable Jar for Project Hoge"> <!--this file was created by Eclipse Runnable JAR Export Wizard--> <!--ANT 1.7 is required --> <property name="jarname" value="Hoge.jar" /> <property name="dir.src" value="WEB-INF/src" /> <property name="dir.dest" value="dest/bin" /> <property name="dir.from.resources" value="resources" /> <property name="dir.to.resources" value="WEB-INF/classes" /> <property name="compiler" value="C:/user/java/6/bin/javac" /> <property name="dir.compiler" value="WEB-INF/lib" /> <property name="dir.compiler.tomcat" value="C:/user/tomcat/6.0/lib" /> <path id="classpath.hoge"> <fileset dir="${dir.compiler}" includes="*.jar" /> <fileset dir="${dir.compiler.tomcat}" includes="*.jar" /> </path> <target name="copy_resources"> <echo message="リソースファイルをコピーします(Tomcat起動用)" /> <copy todir="${dir.to.resources}"> <fileset dir="${dir.from.resources}"> </fileset> </copy> </target> <target name="clean" depends="copy_resources"> <echo message="コンパイル先ディレクトリを削除します" /> <delete dir="${dir.dest}" /> </target> <target name="mkdir" depends="clean"> <echo message="コンパイル先ディレクトリを作成します" /> <mkdir dir="${dir.dest}" /> </target> <target name="compile" depends="mkdir"> <echo message="コンパイルを行います" /> <javac srcdir="${dir.src}" destdir="${dir.dest}" executable="${compiler}" debug="on" debuglevel="lines,vars,source" optimize="off" deprecation="on" encoding="UTF-8" includeAntRuntime="off"> <classpath refid="classpath.hoge" /> </javac> </target> <target name="create_run_jar" depends="compile"> <echo message="Jarファイルを作成します" /> <jar destfile="${jarname}" filesetmanifest="mergewithoutmain"> <manifest> <attribute name="Main-Class" value="Hoge" /> <attribute name="Class-Path" value="." /> </manifest> <fileset dir="${dir.dest}" /> </jar> </target> </project>
上記何をしているかタグごとに上から説明します
処理的にも順次上から実行している流れになっています
propertyタグ
定数的なものを宣言しておりますここで宣言したものは${hoge}という形で参照することができますpathタグ
コンパイル(javac)を行う際に必要になるライブラリを指定しますtarget(name="copy_resources")タグ
設定ファイルをコピーしています実はTomcat用でWEB-INF/classes配下にプロパティファイルがないとTomcatは見えないのでそこにコピーしてあげています
(今回の趣旨とは少しことなるので無視でいいかもしれません)
target(name="clean")タグ
javacをしてできたクラスファイルを出力する先のディレクトリを削除しますこのあとで作成するのですが、なぜ一旦削除するかというと前に作ってclassファイルとかが残っているとjarファイルを作成するときに前のclassファイルを参照してしまう可能性があるので一旦消しています
target(name="mkdir")タグ
javacをしてできたクラスファイルを出力する先のディレクトリを作成しますtarget(name="compile")タグ
javacを実行しますjavacを実行する実際のソースコードがある箇所とそのソースをコンパイルするために必要になるクラスパスのオプションタブを追加しています
クラスパスの設定がうまくいっていない場合はこのコンパイル部分でこけると思います
javacのオプションをいろいろ設定していますが、詳しくは調べてくださいw
大事なのは
encoding="UTF-8" includeAntRuntime="off"
の2つだと思います
target(name="create_run_jar")タグ
コンパイルしてできたclassファイルを元にjarファイル作成しますとまぁbuild.xmlの説明は以上で、こんな感じでjarファイルを作成することはできます
(プロパティファイルのコピーはいらないかもこの中では特殊な制御なのでいらないと思います)
で今回一番ハマったのが、build.xmlをeclipseから実行してantのjavacタグでのコンパイル時に
エラー: \65279は不正な文字です
が出る場合があります
原因はBOM付きのUTF-8で保存されているせい(eclipseのせいなのかなー・・・)
ネットで調べるとWindowsのメモ帳で編集するとBOMがついてしまうそうですがメモ帳で編集した記憶などはない・・・
とりあえずこれを消す方法は
「TeraPad」
を使います
ファイル→文字/改行コード指定保存
で「UTF-8N」を選択して上書き保存します。どうやらこれで保存するとBOMなしのUTF-8で保存できるようですeclipse上だけではこれを回避するのは難しいようです
0 件のコメント:
コメントを投稿