从属性文件中读取 Maven SCM url 值
Read Maven SCM url value from Properties file
我的pom.xmlscm配置如下
<scm>
<url>${my.scm.url}</url>
</scm>
我有 属性 文件,我正在使用 properties-maven-plugin 读取它,它的值为 ${my.scm.url},而且我正在使用 buildnumber-maven-plugin 来获取最新的来自 SVN 的修订。
问题是 buildnumber-maven-plugin 抛出无效的 scm url 错误但是,当我将 ${my.scm.url} 替换为我的 svn 存储库中的实际 url 时,它完美地工作.
如何在不对 scm 进行硬编码的情况下成功执行 url?
PS:我 运行 构建使用:mvn clean install command
.
问题可能是由于插件的顺序 运行。以下应该有效:
- 将
properties-maven-plugin
绑定到 initialize
阶段
- AFTER 在POM中配置插件,添加
buildnumber-maven-plugin
插件
- AFTER 前两个,放置
buildnumber-maven-plugin
插件(默认绑定到 initialize
阶段)。
现在所有 3 个插件都应该 运行 以正确的顺序排列(您可以从日志中查看)。或者,您可以将 绑定到不同的阶段,以确保它们 运行 以正确的顺序排列,但以上内容应该足够并且符合 initialize
phase 的目标( 初始化构建状态,例如设置属性或创建目录).
因为你没有 post POM 文件,所以我猜了一点。
显然,顺序很重要,您必须先加载属性。也就是说,查看 mojo,我不确定设置属性是否等同于设置 -D。
如果您执行了 mvn -Dscm.url= clean install,那么该值将会存在,因为它被定义到 mvn JVM。取决于 ${scm.url} 被评估的时间点,如果它在属性 mojo 有机会 运行 之前,那就太晚了。
如果您使用 CI 工具(即 Jenkins、Hudson)可以在 调用 mvn 之前 加载属性,则变量已定义。
我已经为我的构建使用了 buildNumber mojo,因为我已经为我的快照工件自动生成了 buildNumbers。事情发生的顺序:
- 属性 文件从 Jenkins master 下载到 slave 以完成这项工作
- Jenkins 插件将属性文件加载到作业中
- maven 构建开始,在调用 mvn 之前已经定义了构建号(同样,表现得像 -D)并且我的构建号被合并到我的工件版本中
- buildNumber mojo 导致 属性 文件的 buildNumber 递增
- 属性 文件复制回 Jenkins master
我还想在 Maven 中加载属性文件,并让它 "update" 即时生成工件 ID,但到那时,Maven 已经评估了;因此,我必须事先做。
希望对您有所帮助。
我的pom.xmlscm配置如下
<scm>
<url>${my.scm.url}</url>
</scm>
我有 属性 文件,我正在使用 properties-maven-plugin 读取它,它的值为 ${my.scm.url},而且我正在使用 buildnumber-maven-plugin 来获取最新的来自 SVN 的修订。
问题是 buildnumber-maven-plugin 抛出无效的 scm url 错误但是,当我将 ${my.scm.url} 替换为我的 svn 存储库中的实际 url 时,它完美地工作.
如何在不对 scm 进行硬编码的情况下成功执行 url?
PS:我 运行 构建使用:mvn clean install command
.
问题可能是由于插件的顺序 运行。以下应该有效:
- 将
properties-maven-plugin
绑定到initialize
阶段 - AFTER 在POM中配置插件,添加
buildnumber-maven-plugin
插件 - AFTER 前两个,放置
buildnumber-maven-plugin
插件(默认绑定到initialize
阶段)。
现在所有 3 个插件都应该 运行 以正确的顺序排列(您可以从日志中查看)。或者,您可以将 绑定到不同的阶段,以确保它们 运行 以正确的顺序排列,但以上内容应该足够并且符合 initialize
phase 的目标( 初始化构建状态,例如设置属性或创建目录).
因为你没有 post POM 文件,所以我猜了一点。
显然,顺序很重要,您必须先加载属性。也就是说,查看 mojo,我不确定设置属性是否等同于设置 -D。
如果您执行了 mvn -Dscm.url= clean install,那么该值将会存在,因为它被定义到 mvn JVM。取决于 ${scm.url} 被评估的时间点,如果它在属性 mojo 有机会 运行 之前,那就太晚了。
如果您使用 CI 工具(即 Jenkins、Hudson)可以在 调用 mvn 之前 加载属性,则变量已定义。
我已经为我的构建使用了 buildNumber mojo,因为我已经为我的快照工件自动生成了 buildNumbers。事情发生的顺序:
- 属性 文件从 Jenkins master 下载到 slave 以完成这项工作
- Jenkins 插件将属性文件加载到作业中
- maven 构建开始,在调用 mvn 之前已经定义了构建号(同样,表现得像 -D)并且我的构建号被合并到我的工件版本中
- buildNumber mojo 导致 属性 文件的 buildNumber 递增
- 属性 文件复制回 Jenkins master
我还想在 Maven 中加载属性文件,并让它 "update" 即时生成工件 ID,但到那时,Maven 已经评估了;因此,我必须事先做。
希望对您有所帮助。