2014-10-06 3 views
0

Честный. ANT для меня новичок.раскол и отделка муравьями?

У меня есть строка.

мне нужно использовать эту строку, позволяет сказать (A, B; C;), а

B С

, но я также необходимо цикл по этим значениям и передать их на другой муравейник!

петля для A затем для B и, наконец, для С

количество значений в строке также случайным образом. Я обыскал сеть и обнаружил ее довольно легко с помощью ant-contrib.

но, как обычно, я не могу использовать ant-contrib по некоторым причинам от некоторых других парней.

Любая помощь будет оценена

Благодаря

ответ

2

script task Использование с встроенной JavaScript двигателя (входит в комплект, так как Java 1.6.06, так что никаких дополнительных библиотек или муравей аддоны нужны) и полный доступ к муравьиной API. Вот очень простой фрагмент кода:

<project> 

<property name="foo" value="A;B;C"/> 

<script language="javascript"> 
    <![CDATA[ 
    // a simple String replace action 
    var clean = project.getProperty('foo').replace(';', ' '); 
    println(clean); 

    // create a property for further processing in the buildscript 
    project.setProperty('foobar', project.getProperty('foo').replace(';', ' ')); 

    // for loop 
    var items = project.getProperty('foo').split(';'); 
    for (var i = 0; i < items.length; i++) { 
    println(items[i]); 
    } 
    ]]> 
</script> 

<echo> $${foobar} => ${foobar}</echo> 

</project> 

выход:

[script] A B C 
[script] A 
[script] B 
[script] C 
[echo] ${foobar} => A B C 

Для повторного использования оберните сценарии в macrodef.

--edit после комментария -
можно назвать муравей задачи программно, некоторые примеры использования echo task:

<project> 

<property name="foo" value="A;B;C"/> 

<script language="javascript"> 
    <![CDATA[ 
    // for loop 
    var items = project.getProperty('foo').split(';'); 
    for (var i = 0; i < items.length; i++) { 
    print = project.createTask("echo"); 
    print.addText(items[i]); 
    print.execute(); 
    } 
    ]]> 
</script> 

</project> 

выход:

[echo] A 
[echo] B 
[echo] C 
+0

Привет @Rebse, он работал очень гладко. только одна вещь, которую я хочу знать, могу ли я вызвать цель и передать значения вместо println (items [i]) -> возможно ли это? –

+0

Невозможно ... проверить это .. –

+0

спасибо за ответ Rebse ... но не успел реализовать это ... теперь ... еще раз спасибо –

0

вы могут использовать antcontrib:

<antcontrib:propertyregex property="trimmedprop" 
    input="${untrimmedprop}" 
    defaultValue="${untrimmedprop}" 
    regexp="\s" 
    replace="" 
    global="true" /> 

Для расщепления, я предполагаю, что вы собираетесь использовать «для» цикла, вы можете сделать это с antcontrib также:

<property name="letters" value="a,b,c,d,e"/> 

<antcontrib:for list="${letters}" param="letter"> 
    <echo>Letter ${letter}</echo> 
</antcontrib:for> 

Чтобы получить antcontrib в проекте:

<project default="test" xmlns:antcontrib="antlib:net.sf.antcontrib"> 
    <typedef resource="net/sf/antcontrib/antlib.xml" uri="antlib:net.sf.antcontrib" classpath="/local/path/to/ant-contrib-1.0b3.jar" /> 
Смежные вопросы