Родительские свойства внутри плагина Maven Antrun
-
27-09-2019 - |
Вопрос
Есть многомодульный проект. Внутри ребенка мне нужно сделать некоторые сложные вещи (тест интеграции с развертыванием сервера приложений и т. Д.). Таким образом, есть интеграционный ребенок, и из этого модуля мне нужен корень родителя для достижения других модулей. Я не хочу использовать "..". Есть недвижимость в IntegrationTest Pom:
<properties>
<main.basedir>${project.parent.basedir}</main.basedir>
...
</properties>
И есть плагин Antrun со следующим содержанием:
<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>
На выходе Main.Basedir не решен:
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
После того, как я действительно злой, я решил спросить вас, как обойти это ...
Решение
Я не знаю точно Почему ${project.parent.basedir}
не «доступен» от Antrun, может быть, он просто не поддерживается (см. http://jira.codehaus.org/browse/mng-3597.).
Вот ужасный обходной путь с использованием 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>
Я не горжусь этим, но это вроде «работает» (если для вас в порядке для вас в порядке)
$ MVN Validate [info] сканирование для проектов ... ... [info] --- maven-antrun-plugin: 1.6: Run (Render-Parameter-SQL) @ Q4040778 --- [info] Выполнение задач Главная: [ echo] project.artifactid: q4040778 [echo] project.parent.basedir: $ {project.parent.basedir} echo] main.basedir: / home / pascal / Projects / StackoverflowECHO] Project.basedir: / home / pascal / projects / stackoverflow / q4040778 [echo] project.build.directory: / home / pascal / projects / stackoverflow / q4040778 / target [info] Выполненные задачи ...
Но мне нужно сказать, что вы хотите сделать (Из этого модуля мне нужен корня родителя для достижения других модулей) это Плохая практика, Модули должны быть состоят в себе и не тесно связаны.
Я не рекомендую использовать то, что я разместил :)