build-helper-maven-plugin:无法将替换值与其他插件一起使用

时间:2017-09-11 06:05:33

标签: regex maven google-app-engine

我有一个Google App Engine标准Maven项目,我使用appengine-standard-archetype原型创建了该项目。

我想将${project.version}变量用作部署版本,但某些字符不允许使用该值:

  

可能只包含小写字母,数字和连字符。必须开始   并以字母或数字结尾。不得超过63个字符。

需要修改值0.0.1-SNAPSHOT。然后我使用build-helper-maven-plugin获取替换

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>3.0.0</version>
    <executions>
        <execution>
            <id>version-urlsafe</id>
            <goals>
                <goal>regex-property</goal>
            </goals>
            <configuration>
                <name>project.version.urlsafe</name>
                <value>${project.version}</value>
                <regex>\.</regex>
                <replacement>-</replacement>
                <toLowerCase>true</toLowerCase>
                <failIfNoMatch>false</failIfNoMatch>
            </configuration>
        </execution>
    </executions>
</plugin>

maven-antrun-plugin显示值

<plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.8</version>
    <executions>
        <execution>
            <id>regex-replace-echo</id>
            <phase>package</phase>
            <goals>
                <goal>run</goal>
            </goals>
            <configuration>
                <tasks>
                    <echo>******** Displaying value of property ********</echo>
                    <echo>${project.version.urlsafe}</echo>
                </tasks>
            </configuration>
        </execution>
    </executions>
</plugin>

最后,我将新属性用作部署

的版本
<app.deploy.version>${project.version.urlsafe}-urlsafe</app.deploy.version>

请注意,我在值的末尾添加-urlsafe只是为了理解为什么不考虑该值

使用mvn appengine:deploy运行部署我获得此输出

...

[INFO] Executing tasks

main:
     [echo] ******** Displaying value of property ********
     [echo] 0-0-1-snapshot

...

gcloud.cmd app deploy --version ${project.version.urlsafe}-urlsafe
[INFO] GCLOUD: ERROR: (gcloud.app.deploy) argument --version/-v: Bad value [${project.version.urlsafe}-urlsafe]

即使ant-run插件正确地回应了新版本,当构建deploy命令时,变量本身也会丢失。

然后我尝试在部署之前强制regex-property目标,如下所示

mvn build-helper:regex-property appengine:deploy

但是我在这种情况下遇到了丢失的配置错误:

[ERROR] Failed to execute goal org.codehaus.mojo:build-helper-maven-plugin:3.0.0:regex-property (default-cli) on project maventest: The parameters 'regex', 'name', 'value' for goal org.codehaus.mojo:build-helper-maven-plugin:3.0.0:regex-property are missing or invalid -> [Help 1]

有点偏离: 我决定手动运行build-helper:regex-property作为额外的目标,因为之前遇到类似情况的经验:注入一个新变量的插件,该插件被正确回显但在使用该值时,缺少。以下是参考:Unable to obtaing git.branch property

与插件作者合作,我们发现在appengine之前添加插件目标可以解决问题mvn git-commit-id:revision appengine:deploy。最后,这个问题的根本原因是Maven错误:https://issues.apache.org/jira/browse/MNG-6260

因此,在这种情况下,由于插件配置错误,直接调用插件的解决方法也不合适。

如何才能解决问题?如何在执行appengine deploy时获取正确创建的${project.version.urlsafe}变量?

1 个答案:

答案 0 :(得分:1)

我使用appengine-maven-plugin遇到了同样的问题。你是对的,你需要先在目标build-helper:regex-property上调用才能在app引擎上部署。 但要使其工作,您必须将配置部分移到executions标记之外。 以下是我目前使用的完整配置:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>build-helper-maven-plugin</artifactId>
  <version>3.0.0</version>
  <configuration>
    <name>project.version.urlsafe</name>
    <value>${project.version}</value>
    <regex>\.</regex>
    <replacement>-</replacement>
    <toLowerCase>true</toLowerCase>
    <failIfNoMatch>false</failIfNoMatch>
    <fileSet/>
    <source/>
  </configuration>
</plugin>

然后在调用mvn build-helper:regex-property appengine:deploy时,一切都应按预期工作。