12

プロジェクト間でAntターゲットを共有する確立された方法はありますか? 私は現在解決策を持っていますが、それは少しエレガントではありません。これが私がこれまでに行っていることです。

ivy-tasks.xmlネットワーク上のサーバーでホストされているというファイルがあります。このファイルには、他のターゲットとともに、Ivyでプロジェクトの依存関係を管理するためのボイラープレート タスクが含まれています。例えば:

<project name="ant-ivy-tasks" default="init-ivy"
         xmlns:ivy="antlib:org.apache.ivy.ant">
  ...
  <target name="ivy-download" unless="skip.ivy.download">
    <mkdir dir="${ivy.jar.dir}"/>
    <echo message="Installing ivy..."/>
    <get src="http://repo1.maven.org/maven2/org/apache/ivy/ivy/${ivy.install.version}/ivy-${ivy.install.version}.jar"
         dest="${ivy.jar.file}" usetimestamp="true"/>
  </target>

  <target name="ivy-init" depends="ivy-download"
          description="-> Defines ivy tasks and loads global settings">
    <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"/>
    <ivy:settings url="http://myserver/ivy/settings/ivysettings-user.xml"/>
  </target>
  ...
</project>

このファイルがホストされている理由は、次のことをしたくないからです。

  • ファイルを必要とするすべてのプロジェクトにファイルをチェックインします。これにより重複が発生し、ターゲットの維持が難しくなります。
  • build.xml をソース管理からのプロジェクトのチェックアウトに依存させます。これにより、ファイルにアクセスするためだけに、ビルドの最上位に XML が追加されます。

プロジェクトの build.xmls でこのファイルを使用して行うことは、次の行に沿っています。

<property name="download.dir" location="download"/>
<mkdir dir="${download.dir}"/>
<echo message="Downloading import files to ${download.dir}"/>

<get src="http://myserver/ivy/ivy-tasks.xml" dest="${download.dir}/ivy-tasks.xml" usetimestamp="true"/>
<import file="${download.dir}/ivy-tasks.xml"/>

これに関する「汚い」部分は、 import タスクが最上位にある必要があるため、target の外で上記の手順を実行する必要があることです。さらに、必要なすべての build.xml ファイルにこの XML を含める必要があります (つまり、まだ多少の重複があります)。

その上、インポートしたい一般的な (Ivy 以外の) タスクがある可能性がある追加の状況があるかもしれません。Ivy の依存関係管理を使用してこれらのタスクを提供する場合、依存関係を解決するまでに build.xml のターゲット内にいる必要があり、インポートできないため、まだ問題があります (上記の制約に)。

私が達成しようとしていることに対するより良い解決策はありますか?

4

4 に答える 4

7

ANT 1.8+ を使用している場合は、ホストされている場所から build.xml を直接インポートできます。

http://ant.apache.org/manual/Tasks/import.html

Ant 1.8.0 以降、タスクは URL またはクラスパス リソース (実際には URL) からリソースをインポートすることもできます。現在のビルド ファイルのソースがファイルであるか URL であるかを知る必要がある場合は、プロパティ ant.file.type.projectname を調べることができます (上記の ant.file.type.builddocs と同じ例を使用)。 「ファイル」または「URL」。

<!-- importing.xml -->
<project name="importing" basedir="." default="...">
  <import file="http://myserver/ivy/ivy-tasks.xml"/>
</project>
于 2011-01-07T03:51:00.043 に答える
3

If you use Antlibs you can package them all inside a JAR file. Then simply copy this file into the ${ANT_HOME}/lib directory to use them.

于 2009-12-02T09:35:55.480 に答える
1

追加の検索を行った後、考えられる解決策は、SVN外部を使用して、build.xmlで必要になる可能性のある特定の必要なファイルをチェックアウトすることです。

ただし、これは、ソース管理としてSubversionを使用しているユーザーに対してのみ機能します。Subversionを使用していないユーザー、または同様の機能をサポートする別のSCMを使用していないユーザー向けに、SCMに依存しないソリューションがあると便利です。

于 2009-12-01T21:36:47.060 に答える
0

私たちが行ったことは、オフィスの他のプロジェクトに必要なさまざまな xml ファイルを含む「bootstrap」というプロジェクトを作成することです。したがって、開発環境をセットアップするには、bootstrap で build.xml を実行します。これにより、xml ファイル (ivy-stuff やその他のターゲットなど) が既知の場所にコピーされ、ビルド ファイルには次のようなものが含まれます。

<import file="${ant.bootstrap.dir}/ant-commons.xml" />
<import file="${ant.bootstrap.dir}/ant-commons-ear.xml" />

ブートストラップ build.xml には次のものが含まれています。

<target name="install">
        <fail unless="ant.bootstrap.dir" message="ant.bootstrap.dir ${missing.property.message}"/>
        <copy todir = "${ant.bootstrap.dir}">
            <fileset dir = "src/xml"/>
        </copy>
</target>
于 2009-12-30T14:02:38.853 に答える