はじめに
* 実行可能なJARファイル作成をantで行う * antの以下のタスクのマニュアルが役立つhttp://www.jajakarta.org/ant/ant-1.6.1/docs/ja/manual/CoreTasks/jar.html
http://www.jajakarta.org/ant/ant-1.6.1/docs/ja/manual/CoreTasks/manifest.html
例1:単純なサンプル
com.sample.helloworld.Main.java
package com.sample.helloworld; public class Main { public static void main(String[] args) { System.out.println("Hello World!"); } }
build.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?><project basedir="." default="create.jar" name="SampleJavaCodes"><property name="class.path" value="./class" /><property name="main.class" value="com.sample.helloworld.Main" /><property name="java.path" value="./src" /><property name="jar.name" value="SampleJar" /><property name="class.excludes" value="**/tests/**, **/**Test.class, **/**Tests.class, **/demo/**" /><target name="init" description="初期化"><delete dir="${class.path}"/><mkdir dir="${class.path}"/></target><target name="compile" depends="init" description="Javaコンパイル"><javac encoding="Shift-JIS" srcdir="${java.path}" destdir="${class.path}" includeantruntime="false" /></target><target name="create.jar" depends="compile" description="JAR作成"><jar destfile="${jar.name}.jar" basedir="${class.path}" excludes="${class.excludes}"><manifest><attribute name="Main-Class" value="${main.class}"/><attribute name="Class-Path" value="${class.path}"/><attribute name="Specification-Title" value="Sample Title"/><attribute name="Specification-Version" value="1.0.0"/><attribute name="Specification-Vendor" value="Sample Vendor"/></manifest></jar></target></project>
Jarファイルの実行
コマンドプロンプトを立ち上げて、以下のコマンドで実行する> java -jar SampleJar.jar Hello World!
補足:特定のクラスを除外するには
* 「excludes」を使う【例】 <property name="class.excludes" value="**/tests/**, **/**Test.class, **/**Tests.class, **/demo/**" /><target name="createJar" depends="compile" description="JAR作成"><jar destfile="${jarName}.jar" basedir="${class.path}" excludes="${class.excludes}"></jar></target>
例2:サブプロジェクト/ライブラリに依存したプロジェクトに対して、JARファイル作成
構成
+ Common(サブプロジェクト) + src + com.sample.Util.java + SampleProject(JARファイル作成の対象プロジェクト) + src + com.sample.Main.java + lib(使用するライブラリ) + log4j-1.2.17.jar
com.sample.Util.java
package com.sample; public class Util { public static String sayHello(String name) { return "Hello, " + name + "!!"; } }
com.sample.Main.java
package com.sample; import org.apache.log4j.BasicConfigurator; import org.apache.log4j.Logger; public class Main { private static Logger logger = Logger.getLogger(Main.class.getName()); public static void main(String[] args) { BasicConfigurator.configure(); logger.info("start!"); System.out.println(Util.sayHello("Mike")); logger.info("Done!!"); } }
build.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?><project basedir="." default="compile" name="SampleProject"><property name="Common.location" value="../Common" /><property name="Common.src.location" location="${Common.location}/src" /><property name="class.path" value="./class" /><property name="main.class" value="com.sample.Main" /><property name="java.path" value="./src" /><property name="java.excludes" value="**/tests/**, **/**Test.java, **/**Tests.java, **/demo/**" /><property name="class.excludes" value="**/tests/**, **/**Test.class, **/**Tests.class, **/demo/**" /><path id="SampleProject.classpath"><fileset dir="${basedir}/lib"><include name="*.jar" /></fileset></path><target name="init" description="初期化"><delete dir="${class.path}" /><mkdir dir="${class.path}" /></target><target name="compile.sub-project" depends="init" description="サブプロジェクトのJavaコンパイル"><javac encoding="UTF-8" srcdir="${Common.src.location}" destdir="${class.path}" includeantruntime="false" /></target><target name="compile" depends="compile.sub-project" description="Javaコンパイル"><javac encoding="UTF-8" srcdir="${java.path}" destdir="${class.path}" includeantruntime="false"><classpath><path refid="SampleProject.classpath" /></classpath><exclude name="${java.excludes}" /></javac></target><target name="create.jar" depends="compile" description="JAR作成"><jar destfile="${ant.project.name}.jar" basedir="${class.path}" excludes="${class.excludes}"><zipgroupfileset dir="${basedir}/lib" includes="*.jar" /><manifest><attribute name="Main-Class" value="${main.class}" /><attribute name="Class-Path" value="${class.path}" /><attribute name="Specification-Title" value="Sample Title" /><attribute name="Specification-Version" value="1.0.0" /><attribute name="Specification-Vendor" value="Sample Vendor" /></manifest></jar></target></project>
Jarファイルの実行
コマンドプロンプトを立ち上げて、以下のコマンドで実行する> java -jar SampleProject.jar 0 [main] INFO com.sample.Main - start! Hello, Mike!! 4 [main] INFO com.sample.Main - Done!!
参考文献
JARファイル
http://terai.xrea.jp/Ant/JarPackage.htmlhttp://java6.blog117.fc2.com/blog-entry-20.html