propriétés parent à l'intérieur maven antrun plug-in
-
27-09-2019 - |
Question
Il y a un projet multi-module. A l'intérieur de l'enfant que je dois faire des choses compliquées (test d'intégration avec le déploiement sur le serveur d'applications et ainsi de suite). Donc, il y a un enfant integrationtest, et de ce module je besoin de la racine du parent d'atteindre d'autres modules. Je ne veux pas utiliser « .. ». Il y a une propriété integrationtest POM:
<properties>
<main.basedir>${project.parent.basedir}</main.basedir>
...
</properties>
Et il y a un plugin antrun avec le contenu suivant:
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>render-parameter-sql</id>
<phase>validate</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echoproperties/>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
Dans la sortie, le main.basedir n'est pas résolu:
main:
[echoproperties] #Ant properties
[echoproperties] #Thu Oct 28 09:32:13 CEST 2010
[echoproperties] ant.core.lib=C\:\\Users\\gaborl\\.m2\\repository\\org\\apache\\ant\\ant\\1.8.1\\ant-1.8.1.jar
...
[echoproperties] main.basedir=${project.parent.basedir}
[echoproperties] maven.dependency.antlr.antlr.jar.path=C\:\\Users\\gaborl\\.m2\\repository\\antlr\\antlr\\2.7.6\\antlr-2.7.6.jar
Après être devenu je vraiment en colère a décidé de vous demander comment contourner ce ...
La solution
Je ne sais pas exactement pourquoi le ${project.parent.basedir}
n'est pas "disponible" de AntRun, peut-être qu'il est tout simplement pas pris en charge (voir http://jira.codehaus.org/browse/MNG-3597 ).
Voici une solution de contournement en utilisant horribles gmaven:
<plugin>
<groupId>org.codehaus.gmaven</groupId>
<artifactId>gmaven-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<id>set-custom-property</id>
<phase>validate</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<source>
project.properties.setProperty('main.basedir', project.parent.basedir.toString())
</source>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<id>render-parameter-sql</id>
<phase>validate</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<echo>project.artifactId : ${project.artifactId}</echo>
<echo>project.parent.basedir : ${project.parent.basedir}</echo>
<echo>main.basedir : ${main.basedir}</echo>
<echo>project.basedir : ${project.basedir}</echo>
<echo>project.build.directory : ${project.build.directory}</echo>
</target>
</configuration>
</execution>
</executions>
</plugin>
Je ne suis pas fier, mais un peu « oeuvres » (si une chaîne représentant le chemin du basedir parent est ok pour vous):
$ mvn validate [INFO] Scanning for projects... ... [INFO] --- maven-antrun-plugin:1.6:run (render-parameter-sql) @ Q4040778 --- [INFO] Executing tasks main: [echo] project.artifactId : Q4040778 [echo] project.parent.basedir : ${project.parent.basedir} [echo] main.basedir : /home/pascal/Projects/stackoverflow [echo] project.basedir : /home/pascal/Projects/stackoverflow/Q4040778 [echo] project.build.directory : /home/pascal/Projects/stackoverflow/Q4040778/target [INFO] Executed tasks ...
Mais je dois dire que ce que vous voulez faire ( de ce module je besoin de la racine du parent d'atteindre d'autres modules ) est une pratique mauvais, modules devrait être autonome et non couplé hermétiquement.
Je ne recommande pas d'utiliser ce que je posté:)