2

CSV ant プロパティを指定すると、

<property name="module.list" value="mod1,mod2,mod3,mod4,mod5"/>

最初の要素 (つまり、ここでは「mod1」) を取得するにはどうすればよいですか? 「mod1」を引数に取るコマンドを実行したい。

さらに..この元の「module.list」プロパティをリストなどに変更することはできません..これから別のリスト、プロパティなどを作成することはできます..

どんな助けでも大歓迎です..ありがとう

4

6 に答える 6

1

Ant-救助に貢献します。

propertyregexAnt-Contribのタスクを使用して、次のようにコンマ区切りの文字列の最初の部分を抽出できます。

<propertyregex property="module.first"
               input="${module.list}"
               regexp="^([^,]*),"
               select="\1"/>

2番目の質問:Antプロパティは意図的に不変であるため、プロパティの値の変更に依存する設計は一般的にお勧めしません。しかし、それが必要な場合は、varAnt-Contribのタスクでそれを実行できます。さらに、propertyregex上記のように、Ant-Contribの一部のプロパティタスクにoverrideは、ターゲットプロパティの値を変更できるオプションの属性があります。

于 2009-08-29T22:45:41.937 に答える
1

module.listの実際の内容によっては、pathconvertを使用できる場合があります。

<project>
  <property name="module.list" value="mod1,mod2,mod3,mod4,mod5"/>

  <pathconvert property="module.1">
    <path path="${module.list}"/>
    <chainedmapper>
      <flattenmapper/>
      <mapper type="regexp" from="(.*?),.*" to="\1"/>
    </chainedmapper>
  </pathconvert>

  <echo>${module.1}</echo>
</project>

このタスクは大量の文字列操作を行うため、module.listのコンテンツに特殊なパス文字を含めることができる場合、このアプローチは機能しません。その場合、私はより一般的な答えの1つを選びます。

于 2009-08-29T21:15:13.257 に答える
1

すべての変数を使用する場合は、Ant-Contrib タスクの for および foreach を参照することもできます。

<echo message="The first five letters of the alphabet are:"/>
<for list="a,b,c,d,e" param="letter">
  <sequential>
    <echo>Letter @{letter}</echo>
  </sequential>
</for>

http://ant-contrib.sourceforge.net/tasks/tasks/index.html

For Task を使用するには、このタスクの def を宣言することを忘れないでください。

<taskdef resource="net/sf/antcontrib/antlib.xml" />
于 2011-11-29T14:53:11.187 に答える
0

最初の質問

新しい Ant アドオンで = Flakaを使用できます =

<project xmlns:fl="antlib:it.haefelinger.flaka">

  <property name="module.list" value="mod1,mod2,mod3,mod4,mod5"/>

  <target name="main">   
    <!-- simple echo -->
    <fl:echo>xtractedvalue => #{split('${module.list}',',')[0]}</fl:echo>
    <!-- create property for further processing.. -->
    <fl:let>
      xtractedvalue := split('${module.list}',',')[0]
    </fl:let>
    <echo>$${xtractedvalue} => ${xtractedvalue}</echo> 
  </target> 

</project>

2 番目の質問

通常、プロパティは ant で設定されると不変ですが、Flakaを使用すると、そのような既存のプロパティを上書きできます =

  <property name="foo" value="bar"/>
  <fl:let>foo ::= 'baz'</fl:let>

既存のプロパティ foo を新しい値 baz で上書きします。

于 2009-09-03T20:18:33.607 に答える
0

スクリプト タスクを使用します。Javascript または Beanshell でスクリプトを記述し、Ant API を使用して、他の Ant タスクからアクセスできるプロパティを設定できます。

于 2009-08-29T10:17:56.313 に答える