J'ai défini un miroir local pour tous les référentiels du fichier Paramètres.xml: Je veux que mon miroir pointe sur un chemin local, dans ce cas, le chemin est: < / p> où $ {myPath} est une variable que je passe lorsque j'invoque Maven: p> Le problème est que Maven ne remplace pas la variable lorsqu'elle est invoquée. Je peux voir que cette erreur se passe par inspection du journal de construction. Par exemple, Maven rapporte qu'il télécharge un fichier de fichier: // $ {mypath} /maven/.m2/repository lorsque le bon serait Fichier: /// d: /test/maven/.m2/repository. < / p> J'ai également noté que Maven remplace correctement ma variable lorsqu'il est inséré dans l'étiquette d'enfant d'URL de la balise de référentiel: p> La construction fonctionne correctement lorsque Je remplace la variable dans mes paramètres.xml par l'URL complète, comme dans l'exemple ci-dessous: p>
5 Réponses :
C'est probablement un bug - Malheureusement, le remplacement de la propriété ne semble pas être cohérent sur des plugins maven. J'ai rencontré un bug moi-même en spécifiant plus de deux propriétés dans un élément de configuration dans un autre plugin. P>
Les paramètres.xml ne sont pas interpolés comme le POM. La propriété ne peut donc pas être utilisée comme indiquée ci-dessus. p>
Oui il peut. Comme je l'ai dit dans la question, j'ai pu insérer la variable dans la balise URL imbriquée dans l'étiquette de référentiel. Notez que cette étiquette de référentiel que j'ai mentionnée est dans le fichier 'Paramètres.xml' et non dans un fichier POM.
Désolé j'ai mal interprété. La partie de profil est interpolée mais toutes les réglages "Base" ne sont pas, par exemple, il ne fonctionne pas bien si vous essayez d'utiliser une propriété pour votre référentiel local.
Ceci est correct, mais ce n'est pas clair de votre réponse Pourquoi vous ne pouvez pas définir les propriétés en dehors des profils, j'ai tenté d'élaborer avec ma réponse
Substitution de la propriété dans les paramètres.xml ne fonctionne pas comme on peut s'y attendre.
Il remplacera les propriétés à l'intérieur de l'élément Profils (comme vous l'avez vu cela substitue à votre URL de référentiel, qui serait définie à l'intérieur d'un profil) , mais pas à des éléments en dehors des profils (comme vous l'avez vu se produire dans la section des miroirs). Cette distinction est faite car l'élément de profilé dans les paramètres.xml est une version tronquée de la élément de profil pom.xml. Il s'agit d'un mécanisme permettant de définir la configuration dans votre POM. La substitution de la propriété est donc autorisée dans les éléments de profilés, car elles font efficacement partie de la POM. P>
Les parties des réglages en dehors de l'élément de profilés représentent La configuration de la plate-forme, celles-ci ne sont pas censées être affectées par des constructions individuelles, elles ne sont donc pas substituées aux propriétés de la ligne de commande. Cela a du sens mais n'est pas vraiment clair nulle part. P>
EDIT: strong> dans La page Paramètres de MAVENS Documentation, dans la dernière phrase de la section Aperçu rapide (tout à fait caché), il étage: p> Notez que les propriétés définies dans les profils dans les paramètres.xml ne peuvent pas être utilisées pour l'interpolation. P>
BlockQuote> Il existe une solution de contournement, vous pouvez remplacer variables d'environnement em> dans les paramètres.xml. Si vous définissez la variable d'environnement: p> et configure l'URL de référentiel comme suit: p> puis invoqué maven comme normal La variable d'environnement est substituée et votre construction doit fonctionner au besoin. P> P>
N'est-ce pas censé être $ {env.m2_mirror} code>.
Ceci est une ancienne question maintenant, mais à partir de Maven 3, et probablement auparavant, vous pouvez vous référer à l'environnement vars, si vous préfixez avec ' Je le fais comme ça: p> alors chaque développeur définit env code>'
m2_local_repo code> vers un emplacement approprié. p> p>
J'ai eu une expérience légèrement différente ici de Rich 's réponse, donc je pense que cela vaut la peine d'être mentionné dans un Un autre.
La substitution variable fonctionne en effet à l'intérieur d'un profil, mais il semble échouer si vous en avez besoin de remplacer avant que la résolution parent POM arrive. P>
J'ai eu la configuration suivante ici: P> < Pré> XXX PRE>
C'est comme ça depuis des années maintenant, tout lieu où j'utilise alors, j'ai commencé à avoir cette exception, même en cours d'exécution aussi simple que (les variables d'avis ne sont pas remplacées dans URL) p> La seule explication raisonnable que je trouve pour ce problème est que la résolution parent POM se produit si tôt dans le processus que les variables ne sont pas encore remplacées. Lorsque je n'ai pas besoin d'aller chercher des instantanés pour les POM des parents, toutes les variables sont remplacées avec succès, comme prévu. Je ne sais pas si je devrais signaler cela comme un bogue. P> Utilisation de Maven 3.6.3 au moment de la réponse, si cela importe. P> P> société.repo.download.endpoint code> var semble fonctionner bien jusqu'à ce que j'en ai besoin pour résoudre un parent Pom comme ceci: p>
mvn -x help: efficace-pom code> uniquement: p>
C'est exactement le problème que je cherche actuellement. Je pense que c'est un bug. Avez-vous trouvé une solution de contournement pour ça? Ce que j'ai découvert, c'est que le comportement est différent lorsque vous injectez la variable de la ligne de commande ou via le fichier .mvn / maven.config. Ce n'est pas idéal pour moi, car je cherche un moyen de partager des propriétés parmi différents projets.
Cela me semble un bug, mais je n'avais pas assez de temps pour signaler une question appropriée. Malheureusement, Maven Tech n'est plus une priorité pour moi.