2011-11-12 5 views
1

私はJavaプロジェクトとANTスクリプトを作成して、単純なコピーコマンドでプロジェクトを他のプロジェクトに配布しています。Antを別の場所に公開する

私はファイルにコピーする場所をantスクリプトのヘッダーに1回だけ指定し、このプロジェクトに依存するすべてのプロジェクトに対して明示的なコピータスクを持たないようにしたいとします。

ANTの配列のようなものが見つからないので、複数のディレクトリに何かを配布する最もクリーンな方法は何でしょうか?

+0

私はDaveに同意します。あなたがMavenリポジトリマネージャ(NexusやArtifactoryなど)に公開し、他のプロジェクトでビルドの出力を依存関係にするような感じです。それをチェックしてください、あなたは振り返らないでしょう –

答えて

1

私はマーティンの答えの下にコメントし何によると、私は別の選択肢として、ソリューションの私のバージョンを投稿したいと思います。そして私はそれを明確にするためにマーティンの答えからプロパティ名を使用しています。

<target name="deploy" > 
    <property name="dest.dirs" value="/dir/one,/dir/two,/dir/thr/ee" /> 
    <for list="${dest.dirs}" param="dest.dir" parallel="true" delimiter="," > 
     <sequential> 
      <copy todir="@{dest.dir}" > 
       <fileset dir="${srd.dir}" /> 
      </copy> 
     </sequential> 
    </for> 
</target> 

「のためには、」Antの-のcontribタスクである、とあなたが使用する必要がありますので、それがバックでMacrodefを使っていることに注意してください@ {}「dest.dir」を参照します。 "dest.dirs"は区切り文字でリスト(多分String [])に分割されます。ここではカンマを使用して分割します(デリミタのデフォルト値はコンマです)。私はまた、すべての "dest.dirs"に同時にファイルをコピーするために "parallel"を追加しましたが、コピーするプロジェクトが大きい場合は "parallel"を削除してください。

詳細については、http://ant-contrib.sourceforge.net/tasks/tasks/for.html および​​をご確認ください。

+0

は最も単純な解決策であるようです – oers

+0

@oers ant-contrib jarをダウンロードしてクラスパスに入れ、 "taskdef"を追加する必要があります:P – coolcfan

1

多くの実行可能なオプションがあるとは思いません。copyタスクは1つのディレクトリのみを受け入れます。

  1. ディレクトリのリストを取得する独自のコピータスクを作成します。
  2. コピーを実行するスクリプト/プログラムを実行します。
  3. サブプロジェクトにプルしますか?

それはこれらのプロジェクトは、新しくプッシュされたコードで動作することを前提になるので、私は、他のプロジェクトにプロジェクトのプッシュを持っていることについては本当に躊躇です。 IMOの "サブ"プロジェクトは、新しいバージョンが必要かどうかを判断する必要があります。

私にとってこれは、依存関係管理の問題のほうがよく聞こえます.Ivy/Maven/Gradle(または他のMaven同様)でうまく処理できます。

すべてのことは、オプション1を実行したい、目的のディレクトリのリストを受け入れるカスタムAntタスクを作成したいと思うように聞こえます。既存のコピータスクを拡張してその機能をすべて取得するのはかなり簡単です。単に「todirs」プロパティを追加するだけです。

1

scriptmapperをコピー作業に使用すると、enablemultiplemappingsとなる場合があります。

まず、ターゲットディレクトリをプロパティにリストし、そこからfilelistを作成します。 (あなたはdirsetを使うことができますが、API for filelistはもっとシンプルです)。次に、スクリプトマッパーで複数の送り先を設定して、コピーを実行します。

<property name="dest.dirs" value="/dir/one,/dir/two,/dir/thr/ee" />  
<filelist id="dests" dir="/" files="${dest.dirs}" /> 

<copy todir="/" enablemultiplemappings="yes"> 
    <fileset dir="${srd.dir}" /> 
    <scriptmapper language="javascript"> 
     <![CDATA[ 
      // Obtain a reference to the filelist 
      var filelist = project.getReference("dests"); 

      var dests = filelist.getFiles(project); 
      for (var i = 0; i < dests.length; i++) 
      { 
       self.addMappedName(dests[i] + "/" + source); 
      } 
     ]]> 
    </scriptmapper> 
</copy> 
+0

ANT-contribタスク "foreach"と "for"も役立ちますか?あなたの例のdest.dirsのように、カンマを使って分割し、 "foreach"または "for"でそれぞれをコピーします。私の環境では、 "foreach"を使ってGrinderを別のマシンに展開します。 – coolcfan

+0

@coolcfan - それは別の可能性もあります。 –

関連する問題