はじめに
* 実行可能な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