Comment filtrer des ressources dans Maven, en remplaçant une des dépendances de l'artifactId?
Je suis en train de construire un pot qui a un fichier xml en tant que ressource. J'aimerais appliquer un filtre xml pour insérer le nom d'une dépendance dans le fichier xml. Le filtrage est au travail, parce que j'ai été capable de tomber dans ${project.build.finalName}
et de le faire remplacer. J'ai trouvé un indice que le bien, je suis à la recherche pourrait être
${project.dependencies[0].artifactId}
mais cela ne semble pas fonctionner. Je suis à la recherche pour remplacer
<fileName>${project.dependencies[0].artifactId}</fileName>
avec
<fileName>OtherLibrary</fileName>
Est-ce possible?
xml, qui se trouve dans src/main/resources:
<somenode>
<fileName>${project.dependencies[0].artifactId}</fileName>
</somenode>
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.foo</groupId>
<artifactId>Thing</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Thing</name>
<url>http://maven.apache.org</url>
<build>
<resources>
<resource>
<directory>${basedir}/src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
<dependencies>
<dependency>
<groupId>com.pts</groupId>
<artifactId>OtherLibrary</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
C'est maven 2.2.1.
OriginalL'auteur Jim | 2010-02-11
Vous devez vous connecter pour publier un commentaire.
Merde, vous avez raison, cette propriété n'est pas remplacé pendant le filtrage de ressources. C'est bizarre et ça sonne comme un bug dans la Maven Ressources Plugin, car cette propriété est correctement interpolées au cours de la
process-resources
phase comme je le démontrerai dans la solution de contournement, je suggère ci-dessous (basé sur le maven-antrun-plugin et leremplacer
tâche).Tout d'abord, ajoutez les lignes suivantes à votre POM:
Ensuite, mettez à jour votre fichier XML dans:
Avec ces changements, l'exécution de
mvn process-resources
serait de produire le résultat suivant:Ce qui prouve la propriété est interpolée (mais pas de mise lors de maven filtrage de ressources)1. Et si vous avez besoin de filtrer plus d'un fichier, le
remplacer
tâche peut prendre un fileset. À l'adapter à vos besoins.1
en Fait, il serait bien de créer un nouveau Jira pour ce bug dans la Maven 2.Ressources x Plugin.j'ai créé MRESOURCES-118.Merci pour l'explication.
Merci pour l'ajout au rapport de bogue, et pour la solution de contournement.
OriginalL'auteur Pascal Thivent
De l'indexation des propriétés ne seront disponibles qu'à l'intérieur de configuration du plugin en raison de la façon dont Maven interpole les POM - et il est donc disponible à antrun remplacer tâche, mais pas pour le filtrage.
Cependant, l'accès à des dépendances par l'indice n'est pas très robuste - il est sensible aux changements de la société mère. Vous pouvez utilisez plutôt la commande suivante dans
pom.xml
:Vous pouvez ensuite continuer à filtrer à l'aide du nom de la propriété:
<fileName>${project.dependencies[0].artifactId}</fileName>
dans le filtrés de la ressource. Mais la deuxième solution est certainement une bonne idée.vous avez raison, désolé. L'interpolation des mécanismes sont quelque chose qui a subi pas mal de changement entre Maven 2.0.x, 2.2.x et 3.0. Je crois que cette expression ne sera disponible qu'à l'intérieur de configuration du plugin dans la plupart des versions de Maven, il est donc préférable de ne pas compter sur elle à tous les.
Je tiens à souligner que la raison pour laquelle je suis à la recherche c'est ce que je suppose est une situation unique/edge cas où j'ai besoin d'ajouter des EJB dans mon persistence.xml. Et parce que l'oreille plugin n'a pas un moyen de spécifier la convention de nommage pour les bocaux dans le dossier lib, je suis allé dans cette voie. La guerre plugin a une belle façon de faire des pots de suivre un modèle de nommage que je souhaite à l'oreille plugin avait. Voir jira.codehaus.org/browse/MEAR-98 par exemple. Finalement, je vais le code de la non-jar ejb de l'existence. C'est juste un pot j'ai hérité et travaille à intégrer.
OriginalL'auteur Brett Porter