2011-11-09 12 views
4

私はsource-locationsと呼ばれるプロパティを持ち、ソースコードが見つかる場所のコンマ区切りのリストを含んでいます。私はこのようなdirsetを使用し、私のAntタスクの一つでフォルダのサブフォルダを含むディレクトリセットを作成する

source-locations=src,other_src_dir,yet_another_dir 

<dirset dir="${basedir}" includes="${source-locations}"/> 

私の問題は、この場合には、ソース・ロケーションプロパティに記載されているディレクトリだけがdirsetの一部になるということですこれらのディレクトリのすべてのサブディレクトリも必要です。どうすればこれを達成できますか?

ご了承ください。ありがとう!

答えて

1

あなたはこれを試すことができます。

<taskdef resource="net/sf/antcontrib/antcontrib.properties" classpathref="path.antcontrib"/> 

<target name="test"> 
    <property name="source-locations" value="src,other_src_dir,yet_another_dir"/> 

    <!--Replace comma symbol to the `/**,` string and save new expression in to the source-locations_mod property--> 
    <propertyregex property="source-locations_mod" 
      input="${source-locations}" 
      regexp="," 
      replace="/**," 
      global="true" /> 

    <!--Add finally `/**` string to the source-locations_mod property. Was used var task to prevent property immutable --> 
    <var name="source-locations_mod" value="${source-locations_mod}/**"/> 

    <!--New source-locations_mod property was used--> 
    <dirset id="source.set" dir="${root.folder}" includes="${source-locations_mod}"/> 

    <!--Check the result--> 
    <pathconvert pathsep="${line.separator}" 
      property="dir.name" 
      refid="source.set"> 
     <mapper type="identity" /> 
    </pathconvert> 
    <echo>Folders: ${dir.name}</echo> 
</target> 

私はpropertyregexAnt-Contribライブラリからvarタスクを使用しました。

+0

優秀!これは動作します!アレックスありがとう! – Liz

1

以下の例。

<mkdir dir="dir1" /> 
<mkdir dir="dir2" /> 
<mkdir dir="dir3" /> 
<mkdir dir="dir1/dir1a" /> 
<mkdir dir="dir1/dir1b" /> 
<mkdir dir="dir1/dir1c" /> 
<mkdir dir="dir2/dir2e" /> 
<mkdir dir="dir2/dir2f" /> 
<mkdir dir="dir2/dir2g" /> 
<mkdir dir="dir3/dir3h" /> 
<mkdir dir="dir3/dir3i" /> 
<mkdir dir="dir3/dir3j" /> 

<property name="source-locations" value="dir1,dir2,dir3" /> 

<pathconvert property="source-locations_mod" pathsep=","> 
    <regexpmapper from="^(.*)$" to="\1/\*\*" handledirsep="true" /> 
    <map from="${basedir}/" to="" /> 
    <dirset dir="${basedir}" includes="${source-locations}" /> 
</pathconvert> 
<echo message="source-locations_mod: ${source-locations_mod}" /> 

<dirset id="dirset" dir="${basedir}" includes="${source-locations_mod}"/> 

<property name="dirs" refid="dirset" /> 
<echo message="dirs: ${dirs}" /> 

+0

これはうまくいくが、私はそれをどうやって行うのか分からない(プロパティファイルのプロパティの値を変更するだけでは不十分である)。あなたは/ **の部分を追加するために、ソルティグレックスを使いますか? – Liz

関連する問題