2015-08-28 2 views
0

Скажем, у меня есть macrodef как такПолучить значение, удерживаемое в Ant элемент

<macrodef name="Test"> 
    <element name="someName"/> 
    <sequential> 
     <java classname="path_to_Test"> 
      <classpath> blah </classpath> 
      <arg value="someText and {valueOfsomeName}"/> 
     </java> 
    </sequential> 
</macrodef> 

Тогда далее вниз У меня есть цель, которая использует эту macrodef, как

<target name="testMacrodef"> 
    <Test> 
     <someName value="someValue"/> 
    </Test> 
</target> 

Мой вопрос, как сделать Я получаю {valueOfsomeName} как строку someValue? Кажется, я не могу заставить его работать.

Кроме того, просто для небольшого контекста я не могу просто использовать тег атрибута вместо тега элемента, так как мне нужно, чтобы он был необязательным аргументом.

Я искал поиски в течение долгого времени, пытаясь найти решение для этого; может быть, нет. Но насколько я вижу, никто не спросил об этом, и, похоже, это не так хорошо описано в документации Ant, так что, если это невозможно, есть ли способ иметь необязательный атрибут?

EDIT: написание

ответ

1

Используйте простой echo, если элемент имеет только текстовое содержимое, f.e. :

<macrodef name="Test"> 
<element name="someName" optional="yes"/> 
<attribute name="foo" default="bar"/> 
    <sequential> 
    <echo> 
    <someName/> 
    </echo> 
    <echo> @@{foo} => @{foo}</echo> 
    </sequential> 
</macrodef> 

<Test> 
<someName>blablabla..</someName> 
</Test> 

выход:

[echo]  
[echo] blablabla.. 
[echo] @{foo} => bar 

в противном случае для вложенного содержимого XML использовать echoxml, F.E. :

<macrodef name="Test"> 
<element name="someName" optional="yes"/> 
<attribute name="foo" default="bar"/> 
    <sequential> 
    <echoxml> 
    <someName/> 
    </echoxml> 
    <echo> @@{foo} => @{foo}</echo> 
    </sequential> 
</macrodef> 

<Test> 
<someName> 
    <echo>blablabla..</echo> 
</someName> 
</Test> 

выход:

<?xml version="1.0" encoding="UTF-8"?> 
<echo>blablabla..</echo> 
[echo] @{foo} => bar 

Если вам нужны значения элементов для дальнейшего использования обработки эхо/echoxml в файл и loadfile впоследствии.
--edit после комментария -
Echo в файл:

<macrodef name="Test"> 
<element name="someName" optional="yes"/> 
<attribute name="foo" default="bar"/> 
    <sequential> 
    <echo file="somefile.txt"> 
    <someName/> 
    </echo> 
    <echo> @@{foo} => @{foo}</echo> 
    </sequential> 

или

<macrodef name="Test"> 
<element name="someName" optional="yes"/> 
<attribute name="foo" default="bar"/> 
    <sequential> 
    <echoxml file="somefile.txt"> 
    <someName/> 
    </echoxml> 
    <echo> @@{foo} => @{foo}</echo> 
    </sequential> 

и использование LoadFile впоследствии => создает свойство (= строка) с содержанием.
При использовании echoxml полосы заголовка XML с цепочки фильтров:

<loadfile srcfile=" ... " property="whatever"> 
<filterchain> 
    <headfilter lines="10" skip="1"/> 
</filterchain> 
</loadfile> 

Адаптировать значение headfilter линий атрибутов для ваших нужд.
собственности независимо будет иметь значение:

<echo>blablabla..</echo> 
+0

Я пробовал это ранее, но тогда как бы включить это содержимое в строку? Например, я хочу сделать эквивалент ' />' где '" text "+ ' является эквивалентом установки '' – jako218

+0

Работал угощение, ура! – jako218

0

Я всегда делаю что-то вроде этого:

<macrodef name="test"> 
    <attribute name="foo"/> 
    <sequential> 
     <echo message="@{foo}"></echo> 
    </sequential> 
</macrodef> 

<target name="so"> 
    <test foo="Hello SO." /> 
</target> 

Надеется, что это помогает.

+0

Как я уже говорил, я не могу использовать тег атрибут, потому что мне это нужно, чтобы быть необязательным.Если я использую тег атрибута, это необходимо, и файл не будет создан, если я не укажу для него значение. Вы могли бы подумать, что я могу просто назначить значение по умолчанию для «», но, к сожалению, это противоречит анализу аргументов на стороне Java. Я не хочу использовать сценарий ant в Java-коде, поэтому использование атрибутов (если только что-то особенное мне не хватает) не может быть и речи. – jako218

+0

А, я вижу. Может быть, это помогает: http://stackoverflow.com/questions/3986937/ant-how-to-write-optional-nested-elements – FeinesFabi