Как установить свойство проекта maven с помощью скрипта groovy, запускаемого с помощью gmavenplus?
У меня есть файл pom, который использует свойство, которое я хотел бы установить во внешнем скрипте groovy. Этот скрипт Groovy нуждается в некоторых существующих свойствах, чтобы определить, что нужно установить для нового свойства, но когда я устанавливаю свойство bindPropertiesToSeparateVariables
в false (при выполнении скрипта) все необходимые свойства предоставляются скрипту groovy, но я не могу установить новое свойство (project.properties.setProperty('myproperty', value)
жалуется на "проект" не существует, и properties.setProperty('myproperty', value)
не работает). Когда я установил bindPropertiesToSeparateVariables
Правда, не все необходимые свойства выставлены на заводной скрипт (project.properties
не имеет всех свойств), но я могу установить новое свойство, используя project.properties.setProperty('myproperty', value)
и это установлено успешно.
Я немного смущен относительно того, что именно bindPropertiesToSeparateVariables
делает, потому что описание свойства в основном просто повторяет то, что уже есть в имени свойства. Я пытался с помощью parent.properties
но это не сработало. Могу ли я вручную определить свойства в конфигурации плагина (прямо выше, где выполняется скрипт), а затем получить к ним доступ с помощью project.properties
? Если это сработало, что если добавить новые свойства, которые я не определял вручную? Есть ли session.properties
Работа?
Вот часть моего файла pom, где выполняется скрипт. В последней строке мне нужно получить доступ к моей новой собственности.
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.example.group</groupId>
<artifactId>example-parent-pom</artifactId>
<version>1.0.0</version>
<relativePath>../../..</relativePath>
</parent>
<groupId>com.example.group</groupId>
<artifactId>example.artifact.id</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<properties>
<someOtherProperty>someValue</someOtherProperty>
<anotherProperty>anotherValue</anotherProperty>
</properties>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<outputDirectory>${project.build.directory}/sql</outputDirectory>
</configuration>
<executions>
<!-- copy the basescript groovy files so they are accessible on the classpath during script execution -->
<execution>
<id>Copy basescripts</id>
<phase>generate-sources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/classes/</outputDirectory>
<resources>
<resource>
<directory>${basedir}/../../../config/build/scripts</directory>
<includes>
<include>**/*.groovy</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
<execution>
<id>Copy some of the scripts we use</id>
<phase>generate-sources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/classes/</outputDirectory>
<resources>
<resource>
<directory>${basedir}/../scripts</directory>
<includes>
<include>**/SomeScriptWeUse.groovy</include>
<include>**/SomeOtherScriptWeUse.groovy</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>resources</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.gmavenplus</groupId>
<artifactId>gmavenplus-plugin</artifactId>
<configuration>
<allowSystemExits>true</allowSystemExits>
<skip>someValue</skip>
</configuration>
<executions>
<execution>
<id>set-myProperty</id>
<phase>generate-sources</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<scripts>
<script>file:///${basedir}/../scripts/setMyProperty.groovy</script>
</scripts>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.example.another.group.id</groupId>
<artifactId>homemade-plugin</artifactId>
<configuration>
<skip>${someSkipProp}</skip>
<verbose>true</verbose>
<forceRemove>true</forceRemove>
<someVersionProp>1</someVersionProp>
</configuration>
<executions>
<execution>
<id>Just another execution</id>
<goals>
<goal>some-goal</goal>
</goals>
<phase>package</phase>
<configuration>
<someProperty>${myProperty}</someProperty>
</configuration>
</execution>
Любые предложения приветствуются. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.
1 ответ
Вы можете сохранить bindPropertiesToSeparateVariables
установить в false и заменить properties.setProperty('myproperty', value)
с properties.project.properties.setProperty('myproperty', value)
, Затем, чтобы получить доступ к свойству ниже в файле pom, укажите его как ${myproperty}
, Не определять <myproperty>value</myproperty
в любом месте файла POM или это не будет работать.