Ant ファイル内から .jar をインクルードして、すぐに使用してターゲットでそのメソッドを呼び出す方法を探しています。私の場合はant-contrib-1.0b3.jar
.
2 に答える
最良の方法は、プロジェクト内に 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) をac
URIと照合します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>
最善の解決策は、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&g=org.apache.ivy&a=ivy&v=LATEST&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として配布されるようになりました。