如何使用 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 否则这将不起作用。