web-dev-qa-db-fra.com

Propriété conditionnelle dans le fichier de propriétés Ant

Est-il possible de définir une valeur de propriété dans Ant property files (par opposition à build.xml) de manière conditionnelle? Par exemple, si la propriété Apache.root est définie, le my_property sera ${Apache.root}/myapp, /var/www/myapp sinon. Sinon, quelle serait la pratique courante: des fichiers build.xml réutilisables?

13
BreakPhreak

Utilisez la tâche 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>
27
Mark O'Connor

Vous pouvez inclure différents fichiers de propriétés en fonction des environnements ou des variables conditionnelles. Par exemple

    <echo>Building ${ant.project.name} on OS: ${os.name}-${os.Arch}</echo>
<property file="build-${os.name}.properties" />

cela inclurait un fichier nommé 'build-Windows 7.properties' ou 'build-Linux.properties' en fonction du lieu d'exécution de la construction. Bien sûr, la directive de propriété cherche dans le répertoire actuel ainsi que le répertoire de base. Ainsi, le fichier de propriétés peut faire partie de la source de génération ou du répertoire de base du compte de génération.

Vous pouvez utiliser la balise de condition pour générer une partie du nom du fichier de propriétés et sélectionner

2
M The Developer

Une des formes les plus simples de condition que vous pouvez utiliser est la suivante:

<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"/>

pour accueillir différents chemins d’installation python par exemple. Ici, le chemin d'installation par défaut est/usr/bin/python sauf pour Host0 où il /usr/bin/python3.4

1
Phil

L'OP demandait un fichier de propriétés, pas dans le fichier de construction ant. Malheureusement, les conditions ne peuvent pas être effectuées à partir d'un fichier de propriétés. Ce que vous pouvez faire est d'avoir des fichiers de propriétés distincts pour chaque ensemble de propriétés dépendantes. Par exemple:

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
1
gyleg5