Как установить свойство проекта maven с помощью скрипта groovy, запускаемого с помощью gmavenplus? - PullRequest
0 голосов
/ 29 мая 2018

У меня есть файл pom, который использует свойство, которое я хотел бы установить во внешнем скрипте groovy.Этот скрипт Groovy нуждается в некоторых существующих свойствах, чтобы определить, для чего нужно установить новое свойство, но когда я устанавливаю для свойства bindPropertiesToSeparateVariables значение false (в рамках выполнения скрипта), все необходимые свойства предоставляются скрипту groovy, но яневозможно установить новое свойство (project.properties.setProperty('myproperty', value) жалуется на то, что «проект» не существует, а 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>

Любые предложения приветствуются.Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

1 Ответ

0 голосов
/ 31 мая 2018

Вы можете оставить для bindPropertiesToSeparateVariables значение false и заменить properties.setProperty('myproperty', value) на properties.project.properties.setProperty('myproperty', value).Затем, чтобы получить доступ к свойству ниже в файле pom, укажите его как ${myproperty}.Не определяйте <myproperty>value</myproperty в любом месте файла pom, иначе это не сработает.

...