Плагин gmaven: как установить свойство в pom.xml для внешнего скрипта groovy

Я запускаю внешний скрипт Groovy через плагин gmaven в pom.xml. Внешний скрипт называется "myscript.groovy".

Я хочу предоставить некоторые параметры / аргументы для myscript.groovy через maven pom.xml [т.е. внутри исполнения плагина 'gmaven-plugin']; но не в состоянии сделать это..

Я пытался использовать в; но не уверен, как получить его значения в Groovy скрипте. Простой вызов properties.get не дает значения свойства.

Snap файла pom:

<plugin>
                    <groupId>org.codehaus.gmaven</groupId>
                    <artifactId>gmaven-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>generate-resources-execute-groovyscript</id>
                            <phase>generate-resources</phase>
                            <goals>
                                <goal>execute</goal>
                            </goals>
                            <configuration>
                                <properties>
                                    <property>
                                        <name>installation.dir</name>
                                        <value>${installation.dir}</value>
                                    </property>
                                </properties>
                                <source>${pom.basedir}/src/main/groovy/configure.groovy</source>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>

Не уверен, как получить значение свойства 'instal.dir' в скрипте 'configure.groovy'.

Любой намек на этот счет будет полезен.. спасибо

1 ответ

Решение

Есть два способа связать и получить свойства. Один будет через свойства, специфичные для плагина.

<plugin>
  <groupId>org.codehaus.gmaven</groupId>
  <artifactId>gmaven-plugin</artifactId>
  <executions>
    <execution>
      <id>generate-resources-execute-groovyscript</id>
      <phase>generate-resources</phase>
      <goals>
        <goal>execute</goal>
      </goals>
      <configuration>
        <properties>
          <installation.dir>${installation.dir}</installation.dir>
        </properties>
        <source>${pom.basedir}/src/main/groovy/configure.groovy</source>
      </configuration>
    </execution>
  </executions>
</plugin>

Они будут получены в сценарии, как project.properties['installation.dir'],

GMaven больше не поддерживается (я был последним сопровождающим). Если вы хотите использовать версии Groovy новее, чем 2.0.0, взгляните на GMavenPlus. Вот эквивалентный POM:

<plugin>
  <groupId>org.codehaus.gmavenplus</groupId>
  <artifactId>gmavenplus-plugin</artifactId>
  <version>1.5</version>
  <executions>
    <execution>
      <goals>
        <goal>execute</goal>
      </goals>
      <phase>generate-resources</phase>
    </execution>
  </executions>
  <configuration>
    <bindPropertiesToSeparateVariables>false</bindPropertiesToSeparateVariables>
    <properties>
      <property>
        <name>installation.dir</name>
        <value>${installation.dir}</value>
      </property>
    </properties>
    <scripts>
      <script>file:///${pom.basedir}/src/main/groovy/configure.groovy</script>
    </scripts>
  </configuration>
  <dependencies>
    <dependency>
      <groupId>org.codehaus.groovy</groupId>
      <artifactId>groovy-all</artifactId>
      <version>2.4.3</version>
      <scope>runtime</scope>
    </dependency>
  </dependencies>
</plugin>

Поиск в этом случае будет как properties['installation.dir'], Я знаю file:/// раздражает. Я удалил требование для этого в следующем выпуске.

Для GMaven или GMavenPlus, если вы выберете подход со свойствами плагина, вам нужно будет установить значение в другом месте с помощью чего-то подобного в POM вашего проекта.

<properties>
  <installation.dir>C:\someDir</installation.dir>
</properties>

Или включите его в свой звонок, как mvn -Dinstallation.dir=C:\someDir

Другой вариант - привязать к свойствам уровня проекта напрямую. Вы бы поместили его в свойства вашего уровня проекта или в свой вызов, как упомянуто выше, и не включали <properties> в плагине <configuration>, Если вы пойдете по этому пути, вы получите доступ к вашему сценарию project.properties['installation.dir'] для GMaven или GMavenPlus (также вынимают <bindPropertiesToSeparateVariables> для GMavenPlus в этом случае).

Если это не работает для вас, попробуйте переименовать installation.dir что-то вроде installationDir, Я не могу вспомнить, если бы периоды были проблематичными.

Другие вопросы по тегам