Antでjarファイルを作るときにmanifestファイルをClass-Pathごと自動生成する方法
大体以下のようになる。
<jar jarfile="${生成するjarファイルの名前}" basedir="${classファイルのあるディレクトリ}"> <path id="libraries"> <fileset dir="${外部ライブラリ用ディレクトリ}" includes="*.jar"/> </path> <pathconvert property="classpath" refid="libraries" targetos="unix" pathsep=" "> <map from="${basedir}\${外部ライブラリ用ディレクトリ}\" to="${実行時のjarファイルから外部ライブラリへのパス}"/> <map from="\" to="/"/> </pathconvert> <manifest> <attribute name="Main-Class" value="${メインクラス}"/> <attribute name="Class-Path" value="${classpath}"/> </manifest> </jar>
- 外部ライブラリを置いてあるディレクトリからjarファイルの一覧を取得。
- 各jarファイルの絶対パスを置き換えて、半角スペース区切りの文字列にする。
- manifestファイルにメインクラスと一緒に指定。
という感じ。
以下にEclipseで使っているAnt用build.xmlのテンプレートを載せておく。
<?xml version="1.0" encoding="UTF-8"?> <project name="build" default="build" basedir="."> <!-- 生成するjarファイル名(拡張子を含まない) --> <property name="jar.name" value=""/> <!-- 実行するメインクラス名(パッケージ名を含む) --> <property name="main" value=""/> <!-- 生成されたjarファイルの配置先 --> <target name="deploy" depends="jar"> <copy file="${jar.filepath}" todir=""/> </target> <!-- jarファイルの配置先でライブラリを置くパス --> <property name="dst.lib.dir" value="../lib/java/"/> <!-- ソースファイルを置くディレクトリ --> <property name="src.dir" value="src"/> <!-- 外部ライブラリを置くディレクトリ --> <property name="lib.dir" value="lib"/> <!-- クラスファイルを置くディレクトリ --> <property name="classes.dir" value="bin"/> <!-- javadocを出力するディレクトリ --> <property name="javadoc.dir" value="docs"/> <!-- 生成されたjarファイルを置くパス --> <property name="jar.filepath" value="${lib.dir}/${jar.name}.jar"/> <!-- デフォルトターゲット --> <target name="build"> <antcall target="javadoc"/> <antcall target="deploy"/> <delete file="${jar.filepath}"/> </target> <!-- jarファイルの生成 --> <target name="jar" depends="compile"> <!-- ライブラリパスを生成 --> <path id="libraries"> <fileset dir="${lib.dir}" includes="*.jar"/> </path> <pathconvert property="classpath" refid="libraries" targetos="unix" pathsep=" "> <map from="${basedir}\${lib.dir}\" to="${dst.lib.dir}"/> <map from="\" to="/"/> </pathconvert> <jar jarfile="${jar.filepath}" basedir="${classes.dir}"> <manifest> <attribute name="Main-Class" value="${main}"/> <attribute name="Class-Path" value="${classpath}"/> </manifest> </jar> </target> <!-- コンパイル --> <target name="compile"> <mkdir dir="${classes.dir}"/> <javac srcdir="${src.dir}" destdir="${classes.dir}"/> </target> <!-- Javadocの生成--> <target name="javadoc"> <javadoc sourcepath="${src.dir}" extdirs="${lib.dir}" destdir="${javadoc.dir}" encoding="UTF-8" additionalparam="-J-Dfile.encoding=UTF-8"/> </target> </project>