我有一个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}
变量?
答案 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
时,一切都应按预期工作。