Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ANT Java Discussion :

Filtrer des fichiers comme le fait Maven2


Sujet :

ANT Java

  1. #1
    Rédacteur

    Filtrer des fichiers comme le fait Maven2
    Bonjour,

    J'ai un fichier properties qui contient des informations propres à un environnement donnés. Par exemple, dev.properties va contenir ce genre de choses :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    application.version=1.0
    application.build=42
    user.name=foo
    user.password=bar
    ...


    J'ai, d'un autre côté, quelques fichiers de configuration qui contiennent ces clés de propriétés (${application.version}, ${user.name} par exemple). Je souhaiterais ainsi que ces fichiers soient filtrés. Autrement dit, que dans mon fichier trucmuche.conf, le ${user.name} soit remplacé par sa valeur dans dev.properties (foo donc).

    Avec Maven2, il suffit simplement d'indiquer que les ressources sont filtrées, et c'est tout.
    Sauf que là, j'ai besoin de le faire avec Ant.
    Comment puis-je faire ?

    J'ai regardé du côté du filterchain ou encore filterreader, mais je n'arrive pas à obtenir ce que je souhaite. Par défaut, Ant veut que les tokens à remplacer soient du format @xxx@ (@user.name@ par exemple), ce qui ne me convient absolument pas !

    Une idée ?
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  2. #2
    Rédacteur

    J'ai trouvé une solution, mais qui est franchement horrible tellement elle est pas belle :

    Code xml :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
        <property file="dev.properties"/>
        <copy todir="${dist-files}" overwrite="true">
            <fileset dir="${src-files}">
                <include name="*.properties"/>
            </fileset>
            <filterchain>
                <filterreader classname="org.apache.tools.ant.filters.ReplaceTokens">
                    <param type="tokenchar" name="begintoken" value="$"/>
                    <param type="tokenchar" name="endtoken" value="}"/>
                    <param type="token" name="{application.version" value="${application.version}"/>
                    <param type="token" name="{user.name" value="${user.name}"/>
                    ...
                </filterreader>
            </filterchain>
        </copy>


    En gros, je charge mon fichier dev.properties. J'ai donc accès, dans mon fichier Ant aux différents ${user.name}, etc. Ensuite, j'utilise un ReplaceTokens. On peut lui définir le token de début et de fin (par défaut @), mais hélas, ces tokens sont des caractères et non des Strings. Du coup, au lieu de chercher des patterns du type ${...}, je me mets à chercher les patterns du type $...}.
    Ensuite, je définis un token par entrée dans mon fichier properties. Pour pallier le problème cité juste avant, je ne cherche pas un entrée du type user.name, mais {user.name.
    Heureusement, je n'ai qu'une petite vingtaine d'entrées dans mon fichier de properties, mais bon quand même !

    C'est laid, c'est moche, c'est pas beau, mais ça marche...



    Y a pas de solution plus simple, plus jolie pour régler un problème qui me paraissait pourtant pas compliqué ?
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven