J'ai un fichier de propriétés par défaut et certains fichiers de propriétés spécifiques de déploiement qui remplacent certains paramètres de la valeur par défaut, en fonction de l'environnement de déploiement. J'aimerais que mon script de construction de fourmis fusionne les deux fichiers de propriétés (écrivant les valeurs par défaut avec des valeurs spécifiques de déploiement), puis émis les propriétés résultantes à un nouveau fichier.
J'ai essayé de le faire comme ça, mais j'étais infructueux: p>
5 Réponses :
Peut-être que vous devriez peut-être regarder le Concat tâche de la fourmi pour cela. < / p>
Je pensais celui-ci. Il doit exister un fichier de propriétés supplémentaire créé, avec chaque clé / valeur du format suivant: mail.server.host = @ mail.server.host @ etc ...
Spécifiez ce fichier "modèle" à l'attribut "Fichier" de la tâche. Également dans le fichier filtre, spécifiez plusieurs avec le moins important énuméré en premier. p>
Donc, cela ressemblerait à ceci: p>
p> p> p>
J'utilise personnellement ceci:
Je l'ai fait comme ceci:
<property prefix="app.properties" file="custom.application.properties" /> <property prefix="app.properties" file="default.application.properties" /> <echoproperties destfile="application.properties"> <propertyset> <propertyref prefix="app.properties"/> <mapper type="glob" from="app.properties.*" to="*"/> </propertyset> </echoproperties>
semble la meilleure réponse à moi puisqu'il devrait fonctionner avec des fichiers de propriétés réguliers plutôt que de nécessiter des jetons @ @
Cependant, cela semble ajouter des jetons d'évasion pour les valeurs de diverses propriétés. Par exemple: j'avais AA = D: \ ABCD. Cela a été converti en AA = D \: \\ ABCD. y-a-t-il un moyen d'éviter ça? Trouvé la tâche des ant Concat fonctionne mieux.
Les autres réponses vont bien, mais j'en avais besoin sans ces limitations:
À la fin, j'ai dû recourir à JavaScript dans un filtre, mais ma solution apporte des propriétés par défaut si et uniquement s'ils ne sont pas définis dans le fichier de propriétés principales.
Il fonctionne en chargement des propriétés principales avec un préfixe obscuce, puis la copie sur la destination, puis concatez les propriétés par défaut pendant les filtrant em> toutes les propriétés par défaut chargées dans la première étape. P > Vous pouvez utiliser ce verbatim mais voudra probablement sortir les relevés de journal ou les modifier au niveau du débogage, une fois que vous êtes convaincu P> <!-- merge the main.properties.file with the default.properties.file
into the output.properties.file (make sure these are defined) -->
<target name="merge">
<!--Obscure enough prefix to ensure the right props are handled-->
<property name="prefix" value="__MY_PREFIX__"/>
<!--Load the main properties so we can tell if the default is needed-->
<property prefix="${prefix}" file="${main.properties.file}"/>
<!--Copy the main properties, then append the defaults selectively-->
<copy file="${main.properties.file}" tofile="${output.properties.file}" overwrite="true"/>
<concat destfile="${output.properties.file}" append="true">
<fileset file="${default.properties.file}"/>
<filterchain>
<!--Filter out lines with properties that were already in the main properties -->
<scriptfilter language="javascript"> <![CDATA[
var line = self.getToken();
project.log("line: " + line);
var skipLine = false;
// lines that do not define properties are concatenated
if (line.indexOf("=") != -1) {
// get the property name from the line
var propName = line.substr(0, line.indexOf('='));
project.log("line prop: " + propName);
var loadedPropName = "__MY_PREFIX__" + propName;
if (project.getProperty(loadedPropName) != null) {
project.log("prop has original: " + project.getProperty(loadedPropName));
// skip this line, the property is defined
skipLine = true;
}
}
if (skipLine) {
project.log("skipping line: " + line);
self.setToken(null);
}
else {
// else leave the line in as it was
project.log("adding default line: " + line);
self.setToken(line);
}
]]> </scriptfilter>
</filterchain>
</concat>
</target>
Pour être plus correct, je pouvais lire la propriété pour préfixer pour vous assurer que c'est la même chose, mais cela ne vaut pas le coût supplémentaire