2

AntとIvyを使用してプロジェクトを構築しています。このbuild.xmlファイルは、ant-contribbeanスクリプティングフレームワークbeanshell、およびcommons-loggingに依存します。

Antは、を含むいくつかの場所でライブラリを検索します${user.home}/.ant/lib

おそらくIvy自体を使用して、これらのライブラリがまだ存在しない場合にbuild.xml、これらのライブラリを自動的にダウンロードしてディレクトリにインストールする方法はありますか?${user.home}/.ant/lib

ありがとう、ラルフ

4

3 に答える 3

5

アリのlibに必要な唯一の瓶はツタです:-)

ivy.xmlファイル内で通常どおり依存関係を宣言します。構成を利用して、ANTタスクに関連付けられたjarをまとめてグループ化します。

<configurations>
    <conf name="tasks" description="Ant tasks"/>
</configurations>

<dependencies>
    <dependency org="ant-contrib" name="cpptasks" rev="1.0b5" conf="tasks->default"/>
    <dependency org="junit" name="junit" rev="3.8" conf="tasks->default"/>
    ..

build.xmlファイルで、この構成からパスを作成できます

<ivy:resolve/>
<ivy:cachepath pathid="tasks.path" conf="tasks"/>

<taskdef name="task1" classname="??" classpathref="tasks.path"/>
<taskdef name="task2" classname="??" classpathref="tasks.path"/>
于 2010-09-16T23:12:02.123 に答える
3

Ivy cachefilesetのドキュメントを読んでいたときに、この質問が発生しました。

ビルドをivyからより独立させる、retrieve +標準のantパス作成の使用をお勧めします(アーティファクトが適切に取得されると、ivyは不要になります)。

Ivy cachepathのドキュメントにも、同様に次のように記載されています。

ビルドをIvyからより独立させたい場合は、取得タスクの使用を検討できます。アーティファクトが適切に取得されると、標準のAntパス作成を使用できるため、Ivyは不要になります。

したがって、antパスと組み合わせてretrieveを使用するものに対するMarkの応答を変更する方が良い答えのように思われます。次の線に沿った何か:


マークの応答(変更)

<configurations>
  <conf name="tasks" description="Ant tasks"/>
</configurations>

<dependencies>
  <dependency org="ant-contrib" name="cpptasks" rev="1.0b5"
      conf="tasks->default"/>
  <dependency org="junit" name="junit" rev="3.8" conf="tasks->default"/>
  ..

build.xmlファイルで、この構成からパスを作成できます

<ivy:retrieve conf="tasks"
     pattern="${dir.where.you.want.taskdef.jars}/[artifact]-[revision].[ext] />

<path id="tasks.path">
  <fileset dir="${dir.where.you.want.taskdef.jars}">
    <include name="**/*.jar"/>
  </fileset>
</path>

<taskdef name="task1" classname="??" classpathref="tasks.path"/>
<taskdef name="task2" classname="??" classpathref="tasks.path"/>

これにより、依存関係を処理する別のantファイルに取得タスクを移動することもできます。これにより、依存関係がディレクトリに取得された後、ivyに依存する必要がなくなります。

ツタの意図は、あなたがそれを使ってあなたの瓶を引き下げることです(解決して回収する)。それらを配置したら、標準のAntの使用に戻すことができます。


注:これらの依存関係をlibディレクトリにプルするだけです。これにより、取得タスクが簡素化されます。

<ivy:retrieve conf="tasks" />

また、注:「標準のantパスの作成」の詳細については、このページの「パスのような構造」セクションにアクセスしてください。

于 2011-02-03T04:06:57.423 に答える
2

antを使用してすべてをint=Dにインストールします

ただdepends="init-ant-contrib、init-ivy"を使用してください

<!-- ANT-CONTRIB Auto Installer -->
<available property="ant-contrib-exists"
           file="${ant.library.dir}/ant-contrib-1.0b3.jar" />
<target name="download-ant-contrib" unless="ant-contrib-exists">
  <mkdir dir="${ant.library.dir}" />
  <get src="http://downloads.sourceforge.net/project/ant-contrib/ant-contrib/1.0b3/ant-contrib-1.0b3-bin.zip?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fant-contrib%2Ffiles%2Fant-contrib%2F1.0b3%2F&amp;use_mirror=cdnetworks-us-1"
       dest="${ant.library.dir}/ant-contrib-1.0b3-bin.zip"
       username="true" />
  <unzip src="${ant.library.dir}/ant-contrib-1.0b3-bin.zip"
         dest="${ant.library.dir}"
         overwrite="no" />
  <move todir="${ant.library.dir}">
    <fileset file="${ant.library.dir}/ant-contrib/*.jar" />
    <fileset file="${ant.library.dir}/ant-contrib/lib/*.jar" />
  </move>
  <delete file="${ant.library.dir}/ant-contrib-1.0b3-bin.zip" />
  <delete dir="${ant.library.dir}/ant-contrib" />
</target>
<target name="init-ant-contrib" depends="download-ant-contrib">
  <taskdef resource="net/sf/antcontrib/antcontrib.properties">
    <classpath>
      <pathelement location="${ant.library.dir}/ant-contrib-1.0b3.jar" />
    </classpath>
  </taskdef>
</target>

<!-- IVY Auto Installer -->
<property name="ivy.install.version" value="2.1.0-rc2" />
<condition property="ivy.home" value="${env.IVY_HOME}">
  <isset property="env.IVY_HOME" />
</condition>
<property name="ivy.home" value="${user.home}/.ant" />
<property name="ivy.jar.dir" value="${ivy.home}/lib" />
<property name="ivy.jar.file" value="${ivy.jar.dir}/ivy.jar" />
<available file="${ivy.jar.file}" property="ivy-exists" />
<target name="download-ivy" unless="ivy-exists">
  <mkdir dir="${ivy.jar.dir}" />
  <!-- download Ivy from web site so that it can be used even without any special installation -->
  <get src="http://repo2.maven.org/maven2/org/apache/ivy/ivy/${ivy.install.version}/ivy-${ivy.install.version}.jar"
       dest="${ivy.jar.file}"
       usetimestamp="true" />
</target>
<target name="init-ivy" depends="download-ivy">
  <!-- try to load ivy here from ivy home, in case the user has not already dropped
              it into ant's lib dir (note that the latter copy will always take precedence).
              We will not fail as long as local lib dir exists (it may be empty) and
              ivy is in at least one of ant's lib dir or the local lib dir. -->
  <path id="ivy.lib.path">
    <fileset dir="${ivy.jar.dir}" includes="*.jar" />
  </path>
  <taskdef resource="org/apache/ivy/ant/antlib.xml"
           uri="antlib:org.apache.ivy.ant"
           classpathref="ivy.lib.path" />
</target>

ant-contribとivyができたので、他のすべては単純なivy.xmlとivy-resolveawayになります。

<target name="resolve" depends="init-ivy">
    <ivy:retrieve />
  </target>

必要なantタスクをインストールする同様の方法を見つけることができると確信しています。

于 2011-06-30T21:19:55.483 に答える