Использование build-helper-maven-plugin - PullRequest
0 голосов
/ 13 июня 2019

У меня есть pom.xml ниже.

Я бы хотел передать свойство tag в мою сборку, используя эту команду:

mvn clean package -Dtag=test

Он должен разделить это свойство на два других, my.group и my.version, а затем использовать его в URI для создания пакета XLDeploy, используя xldeploy-maven-plugin (https://docs.xebialabs.com/xldeploy-maven-plugin/6.0.x/).

Моя проблема в том, что цель regex-properties на самом деле делает эту работу, как я вижу благодаря maven-antrun-plugin:

[INFO] --- maven-antrun-plugin:1.1:run (default) @ myArtifactId ---
[INFO] Executing tasks
     [echo] Displaying value of 'my.group' property
     [echo] [my.group] group/test
     [echo] Displaying value of 'my.version' property
     [echo] [my.version] test

Но команда grep fileUri target\deployit-working-dir\deployit-manifest.xml показывает, что переменные в Uri не заменяются:

grep fileUri target\deployit-working-dir\deployit-manifest.xml
      <fileUri>http://mynexus.ur/service/local/repositories/my-repo/content/${my.group}/anArtefact/${my.version}/anArtefact-1.0.zip</fileUri>

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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>myGroupId</groupId>
    <artifactId>myArtifactId</artifactId>
    <version>1.0</version>

    <packaging>dar</packaging>

    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <version>3.0.0</version>
                <executions>
                    <execution>
                        <id>regex-properties</id>
                        <goals>
                            <goal>regex-properties</goal>
                        </goals>
                        <configuration>
                            <regexPropertySettings>
                                <regexPropertySetting>
                                    <name>my.group</name>
                                    <value>group/${tag}</value>
                                    <regex>(asm-[0-9]+)-([0-9]+.[0-9]+)-([0-9]+)$</regex>
                                    <replacement>$1</replacement>
                                    <failIfNoMatch>false</failIfNoMatch>
                                </regexPropertySetting>
                                <regexPropertySetting>
                                    <name>my.version</name>
                                    <value>${tag}</value>
                                    <regex>(asm-[0-9]+)-([0-9]+.[0-9]+)-([0-9]+)$</regex>
                                    <replacement>$1-SNAPSHOT</replacement>
                                    <failIfNoMatch>false</failIfNoMatch>
                                </regexPropertySetting>
                            </regexPropertySettings>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <version>1.1</version>
                <executions>
                    <execution>
                        <phase>validate</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <tasks>
                                <echo>Displaying value of 'my.group' property</echo>
                                <echo>[my.group] ${my.group}</echo>
                                <echo>Displaying value of 'my.version' property</echo>
                                <echo>[my.version] ${my.version}</echo>
                            </tasks>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>com.xebialabs.xldeploy</groupId>
                <artifactId>xldeploy-maven-plugin</artifactId>
                <version>6.0.0</version>

                <extensions>true</extensions>

                <configuration>
                    <deployables>
                        <file.Folder name="file">
                            <scanPlaceholders>false</scanPlaceholders>
                            <fileUri>http://mynexus.ur/service/local/repositories/my-repo/content/${my.group}/anArtefact/${my.version}/anArtefact-${project.version}.zip</fileUri>
                        </file.Folder>
                    </deployables>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Я не совсем уверен, ошибочен ли build-helper-maven-plugin или где-либо еще в моем POM, или просто отсутствует замена свойств в xldeploy-maven-plugin ...

Спасибо за помощь;)

1 Ответ

1 голос
/ 14 июня 2019

Я проверил источник xldeploy-maven-plugin-6.0.1, и кажется, что это ограничение текущей реализации.

Проблема в том, что GenerateDeploymentPackageMojo не полагается на maven для выполнения замены свойств. Вместо этого он использует пользовательский AbstractConfigurationConverter с именем DeployitCIConverter (который делегирует MavenDeployableConverter) для преобразования узла <deployables> в список MavenDeployable)

Это сводится к:

  • у вас есть доступ к действующему POM
  • у вас нет доступа к свойствам, определенным динамически через плагин сборки помощника

Конечно, свойства, определенные динамически, могут быть доступны в любом режиме:

Для плагина antrun он использует ExpressionEvaluator явно в задаче эха. Информационная статья: Разрешение свойств в Maven и его влияние на плагин Antrun

Идеи для решения проблемы:

  • выполните синтаксический анализ вашей группы и версии во внешнем скрипте и передайте значения в команду mvn.
  • создание cutom mojo, расширяющего GenerateDeploymentPackageMojo, и возможность развертывания препроцесса в методе execute (не так сложно, как кажется).
...