このチュートリアルでは、Antビルドスクリプトを使用して遠く/遠いJarファイルを作成する方法を説明します。これはプロジェクト全体の外部依存関係を単一のjarファイルに含めることを意味します。

使用される技術:

  1. アリ1.9.4

  2. Ant-Ivy 2.4

  3. ログバック1.1.2

  4. joda-time 2.5

1.ファット・ジャーを作成する

以前のリンク://ant/ant-how-to-create-a-jar-file-with-external-libraries/[Ant外部ライブラリ]Javaプロジェクトは再利用されます。 fat jarを作成するには、 “Jar”​​タスクと `zipfileset`関数を使用します。

build.xml

    <!-- Group all dependencies into a big dependency-all.jar -->
    <target name="copy-dependencies">

        <mkdir dir="${dist.lib.dir}"/>

        <jar jarfile="${dist.lib.dir}/dependencies-all.jar">
            <zipgroupfileset dir="${lib.dir}">
                <include name="** ** /** .jar"/>
            </zipgroupfileset>
        </jar>

    </target>

    <!-- jar it, extract above dependency-all.jar and zip it with project files -->
    <target name="jar" depends="compile, copy-dependencies"
                description="package, output to JAR">

        <mkdir dir="${dist.dir}"/>
        <mkdir dir="${dist.lib.dir}"/>

        <jar jarfile="${dist.dir}/${projectName}.jar" basedir="${build.dir}">
            <manifest>
                <attribute name="Main-Class" value="${main-class}"/>
            </manifest>
            <zipfileset src="${dist.lib.dir}/dependencies-all.jar"
                                excludes="META-INF/** .SF"/>
        </jar>

    </target>

2. build.xml

完全な `build.xml`の例を見直してください。

build.xml

<project xmlns:ivy="antlib:org.apache.ivy.ant" name="dateUtilsProject" default="main" basedir=".">
    <description>
        Create a Java Project (JAR) with Ant build script
    </description>

    <property name="projectName" value="DateUtils"/>
    <property name="src.dir" location="src"/>
    <property name="build.dir" location="bin"/>
    <property name="dist.dir" location="dist"/>
    <property name="dist.lib.dir" location="dist/lib"/>
    <property name="lib.dir" value="lib"/>
    <property name="main-class" value="com.mkyong.core.utils.DateUtils"/>

    <!-- ivy start -->
    <!-- ivy to get dependencies and copy to project lib folder automatically -->
    <target name="resolve" description="retrieve dependencies with ivy">
        <ivy:retrieve/>
    </target>

    <!-- install ivy -->
    <target name="ivy" description="Install ivy">
        <mkdir dir="${user.home}/.ant/lib"/>
        <get dest="${user.home}/.ant/lib/ivy.jar"
                    src="https://search.maven.org/remotecontent?filepath=org/apache/ivy/ivy/2.4.0-rc1/ivy-2.4.0-rc1.jar"/>
    </target>
    <!-- ivy end -->

    <target name="init">
        <mkdir dir="${build.dir}"/>
    </target>

    <path id="classpath">
        <fileset dir="${basedir}/">
            <include name="${lib.dir}/** .jar"/>
        </fileset>
    </path>

    <!-- Need classpath to run this -->
    <target name="compile" depends="init" description="compile the source ">
        <javac includeantruntime="false" srcdir="${src.dir}"
                       destdir="${build.dir}" classpathref="classpath"/>
    </target>

    <!-- Group all dependencies into a big dependency-all.jar -->
    <target name="copy-dependencies">

        <mkdir dir="${dist.lib.dir}"/>

        <jar jarfile="${dist.lib.dir}/dependencies-all.jar">
            <zipgroupfileset dir="${lib.dir}">
                <include name="** ** /** .jar"/>
            </zipgroupfileset>
        </jar>

    </target>

    <!-- jar it, extract above dependency-all.jar and zip it with project files -->
    <target name="jar" depends="compile, copy-dependencies"
                description="package, output to JAR">

        <mkdir dir="${dist.dir}"/>
        <mkdir dir="${dist.lib.dir}"/>

        <jar jarfile="${dist.dir}/${projectName}.jar" basedir="${build.dir}">
            <manifest>
                <attribute name="Main-Class" value="${main-class}"/>
            </manifest>
            <zipfileset src="${dist.lib.dir}/dependencies-all.jar"
                                excludes="META-INF/** .SF"/>
        </jar>

    </target>

    <target name="clean" description="clean up">
        <delete dir="${build.dir}"/>
        <delete dir="${dist.dir}"/>
    </target>

    <!-- Default, run this -->
    <target name="main" depends="clean, compile, jar"/>

</project>

3.実行とテスト

3.1 Ivyをインストールします。インストールした場合は、これをスキップします。

$ ant ivy

3.2プロジェクトの依存関係をダウンロードするようにIvyに依頼してください。

$ ant resolve

3.3。最後のファットジャーをきれいにし、コンパイルして作成します。

$ ant

Buildfile:/Users/mkyong/Documents/workspace/AntDateUtils/build.xml

clean:

init:
   [mkdir]Created dir:/Users/mkyong/Documents/workspace/AntDateUtils/bin

compile:
   [javac]Compiling 1 source file to/Users/mkyong/Documents/workspace/AntDateUtils/bin

copy-dependencies:
   [mkdir]Created dir:/Users/mkyong/Documents/workspace/AntDateUtils/dist/lib
     [jar]Building jar:/Users/mkyong/Documents/workspace/AntDateUtils/dist/lib/dependencies-all.jar

jar:
     [jar]Building jar:/Users/mkyong/Documents/workspace/AntDateUtils/dist/DateUtils.jar

main:

BUILD SUCCESSFUL
Total time: 9 seconds

3.4実行する

$ java -jar dist/DateUtils.jar

12:11:23.732[main]DEBUG com.mkyong.core.utils.DateUtils -[MAIN]Current Date : 2014-12-24
2014-12-24

ソースコードをダウンロードする

ダウンロードする – リンク://wp-content/uploads/2014/12/AntDateUtils-fat-jar.zip[AntDateUtils-fat-jar.zip](8 KB)

参考文献

zipfileset]。リンク://ant/ant-how-to-create-a-java-project/[Ant – を作成する方法

Javaプロジェクト]。 link://ant/ant-how-to-create-jar-file-with-external-libraries/[Ant-

外部ライブラリを使用したJarファイルを作成する方法]