【问题标题】:Read Maven SCM url value from Properties file从属性文件中读取 Maven SCM url 值
【发布时间】:2015-07-04 02:27:11
【问题描述】:

我的pom.xml有scm配置如下

<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 repo 的实际 url 时,它工作得很好。

如何在无需硬编码 scm url 的情况下成功执行?

PS:我使用 mvn clean install command 运行构建。

【问题讨论】:

    标签: java maven svn


    【解决方案1】:

    问题可能是由于插件运行的顺序造成的。以下应该有效:

    1. properties-maven-plugin 绑定到initialize 阶段
    2. 在 POM 中配置该插件后,添加 buildnumber-maven-plugin 插件
    3. 前两个之后,放入buildnumber-maven-plugin 插件(默认绑定到initialize 阶段)。

    现在所有 3 个插件都应该以正确的顺序运行(您可以从日志中检查这一点)。或者,您可以将它们绑定到不同的阶段以确保它们以正确的顺序运行,但以上应该足够并且符合initialize phase 的目标(初始化构建状态,例如设置属性或创建目录 em>)。

    【讨论】:

    • 谢谢你的回答,第2点和第3点有什么区别。你能详细说明一下吗?
    • 然而,您的回答将我推向了正确的方向,我得到了它的工作。谢谢
    【解决方案2】:

    因为你没有发布 POM 文件,所以我猜了一下。

    显然,顺序很重要,您必须先加载属性。也就是说,看看mojo,我不确定设置属性是否等同于设置-D。

    如果您执行了 mvn -Dscm.url= clean install,那么该值将存在,因为它被定义到 mvn JVM。根据评估 ${scm.url} 的时间点,如果在属性 mojo 有机会运行之前,那就太迟了。

    如果您使用可以在 mvn 调用之前加载属性的 CI 工具(即 Jenkins、Hudson),则定义了变量。

    我已将 buildNumber mojo 用于构建,因为我已为我的快照工件自动生成 buildNumber。事情发生的顺序:

    1. 此作业的属性文件从 Jenkins 主服务器下载到从服务器
    2. Jenkins 插件将属性文件加载到作业中
    3. maven 构建开始,在调用 mvn 之前已经定义了构建号(再次,表现得像 -D)并且我的 buildNumber 被合并到我的工件版本中
    4. buildNumber mojo 导致属性文件的 buildNumber 递增
    5. 将属性文件复制回 Jenkins master

    我还想在 maven 中加载属性文件并让它即时“更新”工件 ID,但到那时,Maven 已经评估过;因此,我必须事先做。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2020-05-10
      • 1970-01-01
      • 2011-10-31
      • 1970-01-01
      • 2013-01-21
      • 2013-01-20
      • 2012-01-22
      • 2013-05-07
      • 2015-11-10
      相关资源
      最近更新 更多