【问题标题】:Maven build-helper-maven-plugin regex unable to use property as dependency.versionMaven build-helper-maven-plugin 正则表达式无法将属性用作dependency.version
【发布时间】:2014-08-25 10:10:57
【问题描述】:

我正在尝试使用 build-helper-maven-plugin 正则表达式来转换默认属性,然后再将其用于依赖项部分。

我的 pom.xml 文件属性部分如下所示...

<properties>
    <some.version>114.6.9</some.version>
</properties>

我的 pom.xml 文件构建插件部分看起来像...

    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <version>1.9</version>
            <executions>
                <execution>
                    <id>regex-property</id>
                    <goals>
                        <goal>regex-property</goal>
                    </goals>
                    <configuration>
                        <name>some.version</name>
                        <value>${P_SOME_VERSION_AS_PASSED_BY_JENKINS}</value>
                        <regex>^dirtyPrefix-(\S*)</regex>
                        <replacement>$1</replacement>
                        <failIfNoMatch>false</failIfNoMatch>
                    </configuration>
                </execution>
            </executions>
        </plugin>

我的 pom.xml 依赖版本看起来像...

<dependencies>
    <dependency>
        <groupId>someArtifactGroup</groupId>
        <artifactId>someArtifact</artifactId>
        <version>${some.version}</version>
    </dependency>
</dependencies>

这个想法是,如果使用 Jenkins 并传递依赖项覆盖,它将被剥离其前缀并使用而不是默认值。
但是,在验证依赖项之前,这个插件似乎没有运行 - 是否有可能让它工作或者有更好的方法?

【问题讨论】:

  • 属性替换在 build-helper-mavne-plugin 运行之前完成。除此之外,为什么要覆盖 jenkins 作业中的依赖项?
  • 听起来这个插件如果运行后就不能用了。我想这样做的原因是,特定项目包装了另一个项目(构建多个版本)。我们有一个 Jenkins 构建作业,允许通过其 subversion 标签选择包装的项目。不幸的是,该标签有一个前缀。由于 Maven 发布插件中的错误,我无法在 Jenkins 中使用 shell 来删除它,所以我认为我可以在 pom.xml 中删除它。
  • bug in maven release plugin 与使用 shell 脚本的关系是什么意思?以及svn标签和Maven中一个工件的版本之间的关系在哪里?
  • 发布插件允许一个参数部分 - 我想在这里传递那个参数... -Dbuild.number=${BUILD_NUMBER} -Dbuild.id=${BUILD_ID} -Dresume= false release:prepare release:perform -Darguments="-DP_SOME_VERSION_AS_PASSED_BY_JENKINS=${P_SOME_VERSION}" 但是在 Jenkins 作业的“预步骤”版本中,我通过解析用户输入来创建 P_SOME_VERSION 以去除颠覆标记前缀。 ..或者至少那是我的第一次尝试。似乎一个已知问题意味着扩展不在发布插件的“参数”部分中执行。
  • khmarbaise - 回答您的其他问题。在 Jenkins 作业中,使用由 subversion 参数插件“列出 Subversion tags (and more)”填充的下拉列表选择用户输入。这列出了依赖项目的发布标签。我可以看到使用获取此标记版本的父 Jenkins 作业执行此操作的方法,使用 shell 脚本解析出前缀,然后将其传递给主 Jenkins 作业。因此,我可以完全排除使用 Maven 解析前缀的可能性,因为此时它将是正确的。但我希望避免父母 Jenkins 的工作。

标签: java regex maven ant jenkins


【解决方案1】:

我的情况类似,但是用 -D 覆盖不是解决方案(只是不要问),因为我有一些变量,配置文件也没有。

在我的情况下是这样的: fabric8 docker maven 插件使用一个变量。 该变量由“build-helper-maven-plugin”正则表达式属性生成。

如果调用“mvn docker:build”,则不使用验证阶段并且变量不存在(所以我得到一个“${blabla}”文字)并且构建失败。 如果我调用通常的构建,则会创建变量。

我采用了运行“mvn validate docker:build”而不是“mvn docker:build”的策略来强制执行验证步骤,因此变量被创建。

【讨论】:

    猜你喜欢
    • 2012-05-30
    • 2014-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多