Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / ant + пустой element в macrodef / 4 сообщений из 4, страница 1 из 1
18.07.2012, 18:57:47
    #37884386
A+
A+
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ant + пустой element в macrodef
пишу макрос - примерно такой:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
	<!-- копирует ресурсы в папку назначения -->
    <macrodef name = "copy.i18n.files">
    	<!-- этот атрибут определяет папку, куда будут складываться файлы локализации -->
        <attribute name = "outputDirectory" default = "target/classes" />
    	<!-- этот опциональный элемент определяет набор файлов, что надо скопировать в папку назначения -->
		<element name = "resources" optional = "true" />
        <sequential>
        	<echo>
        		About to copy i18n files into @{outputDirectory}...
        	</echo>
        	<!-- 1. Скопируем ресурсы -->
	   		<copy todir = "@{outputDirectory}" >
				<resources />
    		</copy>
        </sequential>
    </macrodef>



Проблема: если элемент <resources> пустой, то таска <copy> валится, т.е., если вызовут макрос так:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
		<!-- 2. Скопируем локализационные файлы -->
		<copy.i18n.files outputDirectory = "config/localizations">
			<resources>
    			<fileset dir = "src">
        			<include name="res-*.properties"/>
    			</fileset>
			</resources>
		</copy.i18n.files>


- то все хорошо - все работает, но если так:

Код: java
1.
2.
3.
		<!-- 2. Скопируем локализационные файлы -->
		<copy.i18n.files outputDirectory = "config/localizations">
		</copy.i18n.files>


- проблема.

Хотелось бы в самом макросе как-то суметь определить пуст элемент <resources> или нет и в зависимости от этого выполнять разную логику. Только как определить?
...
Рейтинг: 0 / 0
18.07.2012, 19:20:12
    #37884413
ivanov-void
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ant + пустой element в macrodef
A+,

Посмотрите расширения <if>, <equals>, <then>, <isset> и пр. из AntContrib .
...
Рейтинг: 0 / 0
18.07.2012, 19:44:00
    #37884444
ivanov-void
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ant + пустой element в macrodef
И nested conditions , конечно.

Можно два макроса написать и вызывать второй по условию -

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
<macrodef name="copy.i18n.files">
...
    <sequential>
        <if>
            <equal arg1="..." arg2="..." />
            <then>
                <internal-task>
                    ...
                </internal-task>
            </then>
            <else>
               ...
            </else>
        </if>
    </sequential>
</macrodef>


<macrodef name="internal-task">
...
    <sequential>
        <copy ...>
            ...
        </copy>
    </sequential>
</macrodef>



И т.д.
...
Рейтинг: 0 / 0
19.07.2012, 10:51:25
    #37884954
A+
A+
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ant + пустой element в macrodef
ivanov-void,

В том-то и проблема, что к атрибуту макроса можно как-то обратиться: через @ - т.е., можно провести сравнение примерно так:

Код: java
1.
            <equal arg1="@{outputDirectory}" arg2="..." />



а вот с элементом так поступить не получится.

В общем, пока извернулся так:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
        	<!-- 1. Скопируем ресурсы -->
	   		<copy todir = "@{outputDirectory}">
	   			<!-- элемент "resources" может быть пустым - чтоб copy не валился добавим в список для копирования пустышку: -->
    			<fileset dir = "resources" erroronmissingdir = "false" >
        			<exclude name = "**" />
    			</fileset>
				<resources />
    		</copy>



Не эстетично. Если не удастся придумать ничего по-лучше - так и останется.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / ant + пустой element в macrodef / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]