5

Ant ファイル内から .​​jar をインクルードして、すぐに使用してターゲットでそのメソッドを呼び出す方法を探しています。私の場合はant-contrib-1.0b3.jar.

4

2 に答える 2

12

最良の方法は、プロジェクト内に Ant-Contrib jarfile を配置することです。たとえば、build.xmlがプロジェクトのルートにあるとします。ant.lib\ant-contribプロジェクト内にというディレクトリを作成しant-contrib*.jar、このフォルダに を配置します。このメソッドは、必要になる可能性がある他のオプションの Ant タスク (Ivy、Findbugs、Cobrrtura など) に使用できます。

次に、build.xmlファイルでこれを行うことができます:

<taskdef resource="net/sf/antcontrib/antlib.xml">
     <classpath>
         <fileset dir="${basedir}/ant.lib/ant-contrib"/>
     </classpath>
</taskdef>

タスクを含むオプションの jar がプロジェクトに含まれているため、この方法が気に入っています。すべてをバージョン管理システムにチェックインすると、誰かがコードをチェックアウトし、Ant-Contrib を自分でダウンロードしてインストールすることなくビルドを実行できます。

XML 名前空間を定義できます。これにより、同じタスク名を持つ他のオプションの Ant タスクを使用する場合にタスク名の衝突を避けるために、Ant-Contrib タスクにプレフィックスが付けられます。さらに、これが標準の Ant タスクではないことをユーザーに警告します。

XML 名前空間を使用する場合は、見出しに XMLNS 宣言を入れる必要があります<project>。これには、Ant Contrib タスクを XML 名前空間に接続するURIが含まれます。たとえば、ac:名前空間はすべての Ant Contrib タスク用です。

<project name="my.project" default="package" basedir="."
    xmlns:ac="http://ant-contrib.sourceforge.net">

 <taskdef resource="net/sf/antcontrib/antlib.xml"
      uri="http://ant-contrib.sourceforge.net">
     <classpath>
         <fileset dir="${basedir}/ant.lib/ant-contrib"/>
     </classpath>
</taskdef>

これは、 の XML 名前空間 (xmlns) をacURIと照合しますhttp://ant-contrib.sourceforge.net。URI は何でもかまいません。例えば:

<project name="my.project" default="package" basedir="."
    xmlns:ac="hamburger:with-fries">

 <taskdef resource="net/sf/antcontrib/antlib.xml"
      uri="hamburger:with-fries">
     <classpath>
         <fileset dir="${basedir}/ant.lib/ant-contrib"/>
     </classpath>
</taskdef>

標準は次のようなものを使用することですantlib:net.sf.antcontrib

<project name="my.project" default="package" basedir="."
    xmlns:ac="antlib:net.sf.antcontrib">

 <taskdef resource="net/sf/antcontrib/antlib.xml"
      uri="antlib:net.sf.antcontrib">
     <classpath>
         <fileset dir="${basedir}/ant.lib/ant-contrib"/>
     </classpath>
</taskdef>

ただし、プロジェクトの URL を使用するのが好きです。そうすれば、Ant-Contrib タスクに関するドキュメントが必要な場合、Ant-Contrib プロジェクトが存在する URL を知ることができます。

上記の 3 つのケースすべてで、XML 名前空間を で定義しましたac。したがって、すべての Ant-Contrib タスク名の前にac:. あなたはantcontrib好きなものを使うことができます。名前空間を使用するac:と、Ant-contrib タスクは次のようになります。

<ac:if>
   <istrue value="${include.debug.code}"/>
   <ac:then>
        [...]
   </ac:then>
   <ac:else>
        [...]
   </ac:else>
<ac:if>

名前空間全体をスキップする場合は、ドキュメントに記載されている Ant-Contrib タスクを使用するだけです。

<if>
   <istrue value="${include.debug.code}"/>
   <then>
        [...]
   </then>
   <else>
        [...]
   </else>

于 2012-10-15T19:16:29.480 に答える
4

最善の解決策は、apache ivy 依存関係マネージャーを統合することです。Ivy を使用して、すべてのビルド クラスパスを Maven スタイルで管理できます!

アイビー.xml

このファイルには、プロジェクトのサード パーティの依存関係が記述されています。Ivy は構成を使用して、ファイルを論理的にグループ化します。あなたのケースでは、特別な「ビルド」構成を使用して、ビルドに必要な ANT タスクを構成することに注意してください。

<ivy-module version="2.0">
    <info organisation="com.myspotontheweb" module="demo"/>

    <configurations>
        <conf name="compile" description="Required to compile application"/>
        <conf name="runtime" description="Additional run-time dependencies" extends="compile"/>
        <conf name="test"    description="Required for test only" extends="runtime"/>
        <conf name="build"   description="3rd party ANT tasks"/>
    </configurations>

    <dependencies>
        <!-- compile dependencies -->
        <dependency org="org.slf4j" name="slf4j-api" rev="1.6.4" conf="compile->default"/>

        <!-- runtime dependencies -->
        <dependency org="org.slf4j" name="slf4j-simple" rev="1.6.4" conf="runtime->default"/>

        <!-- test dependencies -->
        <dependency org="junit" name="junit" rev="4.10" conf="test->default"/>

        <!-- Build dependencies -->
        <dependency org="ant-contrib" name="ant-contrib" rev="1.0b3" conf="build->default"/>
    </dependencies>

</ivy-module>

ノート:

  • 依存関係は、現在オープンソース jar の約 90% をホストしているMaven Centralからデフォルトで取得されます。

build.xml

<project name="demo" default="build" xmlns:ivy="antlib:org.apache.ivy.ant" xmlns:antcontrib="antlib:net.sf.antcontrib">

    <target name="bootstrap" description="Install ivy">
        <mkdir dir="${user.home}/.ant/lib"/>
        <get src="https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&amp;g=org.apache.ivy&amp;a=ivy&amp;v=LATEST&amp;e=jar"
             dest="${user.home}/.ant/lib/ivy.jar"/>
    </target>

    <target name="init" description="Use ivy to resolve classpaths">
        <ivy:resolve/>

        <ivy:report todir='build/ivy-reports' graph='false' xml='false'/>

        <ivy:cachepath pathid="compile.path" conf="compile"/>
        <ivy:cachepath pathid="runtime.path" conf="runtime"/>
        <ivy:cachepath pathid="test.path"    conf="test"/>
        <ivy:cachepath pathid="build.path"   conf="build"/>
    </target>

    <target name="taskdefs" depends="init" description="Declare 3rd party ANT tasks">
        <taskdef uri="antlib:net.sf.antcontrib" classpathref="build.path"/>
    </target>

    <target name="build" depends="taskdefs" description="Build logic using ant-contrib tasks">
        <echo message="The first five letters of the alphabet are:"/>

        <antcontrib:for list="a,b,c,d,e" param="letter">
            <sequential>
                <echo>Letter @{letter}</echo>
            </sequential>
        </antcontrib:for>
    </target>

    <target name="clean" description="Cleanup build files">
        <delete dir="build"/>
    </target>

    <target name="clean-all" depends="clean" description="Additionally purge ivy cache">
        <ivy:cleancache/>
    </target>

</project>

ノート:

  • 新しいインストールをキックスタートするために使用される特別な「ブートストラップ」ターゲットがあります。残念ながら、ivy はコア ANT で配布されていません
  • cachepath ivy タスクは、ivy によってダウンロードおよびキャッシュされた jar を含む ANT パスを作成するために使用されます。
  • アイビー レポート タスクは、サードパーティ ライブラリの推移的な依存関係を理解するのに非常に役立ちます。
  • antcontrib は、奇妙な名前空間を説明するANT libとして配布されるようになりました。
于 2012-10-15T17:20:42.993 に答える