Comment construire ensemble des propriétés d'un fichier POM Maven?
J'ai besoin de lire et de filtrer un fichier de propriétés à partir d'un emplacement à l'extérieur de mon projet, par exemple ${user.home}/ma.les propriétés. Ce fichier de propriétés ressemble à ceci:
res.dir=/my/stuff/here
resource.dir=C:/${res.dir}
bin.dir=${resource.dir}/bin
cfg.dir=${resource.dir}/config
Que j'ai à faire dans mon construire et dans mon application lors de son exécution. C'est facile à faire en Ant, à l'aide de la La balise de PROPRIÉTÉ. Cependant, il ne semble pas être une bonne façon de le faire dans Maven.
Pour l'instant j'ai essayé le Maven <property>
tag, le Maven <filter>
tag et diverses permutations d'autres balises. Mon échec de la construction ou de l'unité tests échouent, ou les deux.
Si j'ai coder en dur ces propriétés dans le POM, tout fonctionne, donc je sais que le problème viens de lire les propriétés.
J'ai regardé la propriétés-maven-plugin, mais le plugin ne semble plus être maintenu.
Est-il un moyen de faire cela?
- J'ai vu votre commentaire sur le plugin, donc la suppression de ma réponse. Veux juste que vous sachiez que si maintenu ou non maintenue, il fonctionne. (ou au moins, utilisée pour les travaux).
- Merci pour la réponse. Oui, je pense que si le plugin n'est plus maintenu ou même d'être développé (il est répertorié comme "Alpha"), alors soit c'est tellement génial d'aucune évolution n'a été possible (douteux), ou il ya une meilleure façon de le faire. J'espère que quelqu'un va me diriger vers la "meilleure façon".
- Ce qui vous amène à l'hypothèse que le plugin ne sera plus maintenu ? En outre, les propriétés en dehors du projet Maven feront de votre projet dépend de ces choses qui rompent le Maven concept d'avoir toutes les choses nécessaires pour un projet Maven à l'intérieur du projet lui-même. La question est pourquoi vous avez besoin de cela?
- "La question est de savoir pourquoi vous avez besoin de cela?" C'est le standard de l'entreprise. Il a évolué dans les jours de Fourmi. Je ne suis pas plus heureux que le reste de l'Maven de la communauté semble être. Comme pour le plugin, même Codehaus répertorie en tant que "pré-version."
- Je suis à peu près dans le même bateau que vous êtes et recherchez une bonne solution. Qu'avez-vous utilisé finalement?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez simplement mettre en place votre propre
maven-plugin
qui prendra soin de cela pour vous.Voici un exemple avec la structure suivante:
Vous aurez besoin de créer un Mojo qui prend les propriétés de fichier comme entrée et se propage alors les propriétés de la
pom.xml
de laapp
. Lepom.xml
sera effectivement ne pas être mis à jour, mais seulement les données de projet dans ce.pom.xml
plugin/pom.xml
plugin/src/main/java/com/stackoverflow/Q12082277/plugin/PropertiesMojo.java
Vous l'utilisation de ce plugin à partir de la suivante
app/pom.xml
Et alors vous aurez à ajouter les éléments suivants
app.properties
qui fonctionnera comme un modèle et de prendre les valeurs que nous venons de lire à partir d'un fichier et de les définir et créer un béton fichierapp.properties
qui sera accessible à partir de l'intérieur du bocal.app/src/main/resources/app.properties
Et voici enfin une application de test qui vient de charges de la
app.properties
depuis le classpath et imprime le résultat.app/src/main/java/com/stackoverflow/Q12082277/App.java
Maintenant, vous pouvez rester dans le haut répertoire et exécuter
Puis descendre dans la
app
dossier et exécuterEt il apparaîtra à l'impression
Qui est exactement ce que tu voulais.
Je pense qu'il serait mieux si vous avez activé le fichier de propriétés dans un modèle fichier et de prendre les propriétés de la
pom.xml
à l'aide de maven filtrage des ressources.Une configuration simple pourrait ressembler à ceci
pom.xml
src/main/resources/app.properties
src/main/java/com/stackoverflow/Q12082277/App.java
System.out
La
pom.xml
aura les propriétés par défaut qui sont utilisés par tout le monde.Si vous voulez remplacer les valeurs alors appel maven avec des paramètres d'entrée:
System.out
En le faisant de cette manière que tout le monde ait la même vision de l'propriétés et vous pouvez les remplacer si vous le souhaitez lors de l'exécution sur votre propre machine.