如何使用 groovy 脚本 运行 和 gmavenplus 设置 Maven 项目 属性?
How do I set a maven project property with a groovy script run with gmavenplus?
我有一个 pom 文件,它使用我想在外部 groovy 脚本中设置的 属性。此 groovy 脚本需要一些现有属性来确定要设置的新 属性 是什么,但是,当我将 属性 bindPropertiesToSeparateVariables
设置为 false(在脚本执行中)时, groovy 脚本公开了所有必要的属性,但我无法设置新的 属性(project.properties.setProperty('myproperty', value)
抱怨 'project' 不存在,properties.setProperty('myproperty', value)
不起作用)。当我将 bindPropertiesToSeparateVariables
设置为 true 时,并非所有必要的属性都暴露给 groovy 脚本(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>
欢迎提出任何建议。如果需要更多信息,请告诉我。
您可以将 bindPropertiesToSeparateVariables
设置为 false,并将 properties.setProperty('myproperty', value)
替换为 properties.project.properties.setProperty('myproperty', value)
。然后,要访问 pom 文件中更下方的 属性,请将其引用为 ${myproperty}
。不要在 pom 文件中的任何地方定义 <myproperty>value</myproperty
否则这将不起作用。
我有一个 pom 文件,它使用我想在外部 groovy 脚本中设置的 属性。此 groovy 脚本需要一些现有属性来确定要设置的新 属性 是什么,但是,当我将 属性 bindPropertiesToSeparateVariables
设置为 false(在脚本执行中)时, groovy 脚本公开了所有必要的属性,但我无法设置新的 属性(project.properties.setProperty('myproperty', value)
抱怨 'project' 不存在,properties.setProperty('myproperty', value)
不起作用)。当我将 bindPropertiesToSeparateVariables
设置为 true 时,并非所有必要的属性都暴露给 groovy 脚本(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>
欢迎提出任何建议。如果需要更多信息,请告诉我。
您可以将 bindPropertiesToSeparateVariables
设置为 false,并将 properties.setProperty('myproperty', value)
替换为 properties.project.properties.setProperty('myproperty', value)
。然后,要访问 pom 文件中更下方的 属性,请将其引用为 ${myproperty}
。不要在 pom 文件中的任何地方定义 <myproperty>value</myproperty
否则这将不起作用。