Czy możliwe jest ustawienie wartości właściwości w Ant plików właściwości (w przeciwieństwie do build.xml
) w sposób warunkowy? Na przykład, jeśli ustawiona jest właściwość apache.root
- w innym przypadku my_property
będzie . Jeśli nie, jaka byłaby powszechna praktyka - pliki wielokrotnego użytku (build.xml
) do ponownego użycia?Właściwość warunkowa w pliku właściwości mrówek
Odpowiedz
Użyj zadanie condition:
<project name="demo" default="run">
<condition property="my_property" value="${apache.root}/myapp" else="/var/www/myapp">
<isset property="apache.root"/>
</condition>
<target name="run">
<echo message="my_property=${my_property}"/>
</target>
</project>
Możesz dołączyć różnych plików własności w oparciu o środowiskach lub zmiennych warunkowych. Na przykład
<echo>Building ${ant.project.name} on OS: ${os.name}-${os.arch}</echo>
<property file="build-${os.name}.properties" />
obejmowałoby to plik o nazwie „build-Okna 7.properties” lub „build-Linux.properties” w zależności od miejsca budowy jest bycie run. Oczywiście dyrektywa właściwości znajduje się w bieżącym katalogu, a także w katalogu domowym. Tak więc plik właściwości może być częścią źródła kompilacji lub w katalogu domowym konta kompilacji.
Można użyć tagu warunek, aby wygenerować część nazwy pliku właściwości, jak również wybrać
jedną z najprostszych postaci warunku można użyć to:
<exec executable="hostname" outputproperty="hostname"/>
<condition property="python" value="/usr/bin/python3.4">
<equals arg1="${hostname}" arg2="host0"/>
</condition>
<property name="python" value="/usr/bin/python"/>
pomieścić inny ścieżka instalacji pythona na przykład. Tutaj domyślną ścieżką instalacji jest/usr/bin/python z wyjątkiem host0, gdzie to /usr/bin/python3.4
OP pytał o plik właściwości, a nie w pliku kompilacji ant. Niestety nie można wykonać warunków warunkowych z pliku właściwości. Co możesz zrobić, to mieć oddzielne pliki właściwości dla każdego zestawu zależnych właściwości. Na przykład:
build.xml
<condition property="app.name" value="appA">
<equals arg1="${appName}" arg2="A" />
</condition>
<condition property="app.name" value="appB">
<equals arg1="${appName}" arg2="B" />
</condition>
<property file="${app.name}.properties" />
<!-- since properties are immutable, set your defaults here -->
<property name="apache.root" value="/var" />
<property file="restOfProps.properties" />
appA.properties
apache.root=/appA
restOfProps.properties
my_property=${apache.root}/myapp
Dziękuję. Jednak pytałem o pliki 'property', a nie' build.xml'. Lub, jeśli mam rację, czy "stan" to jedyny sposób, aby to się stało? – BreakPhreak
Możesz odczytać plik właściwości w xml kompilacji, a później zdefiniować nową właściwość w oparciu o właściwości ... – Vishal
Chciałbym mieć "kinda" pliki własności wielokrotnego użytku (z warunkami), które będą odczytywane przez kilka 'build.xml 'pliki. Czy zmierzam w złym kierunku? – BreakPhreak