java - 在 Maven 中,如何在运行时动态构建属性值?

标签 java maven properties

在 maven 中,使用以下语法在 pom 中设置属性非常容易:

...
<properties>
  <myValue>4.06.17.6</myValue>
 </properties>
...

现在我需要根据我的 pom.xml 版本构建一个属性。为了创建属性,我想执行以下操作(java 伪代码):

String[] parts = version.split("\\.");
String.format("V%s_%s_%s_P%s", splitted[0],  splitted[1],splitted[2],splitted[3]);
// example: 4.06.17.6 => V_4_06_17_P6

它应该是动态的,因为它在我们的存储库中用作标签名称并且必须始终与 Artifact 的版本同步。

关于如何创建“动态”属性的任何想法?

最佳答案

Mojo 的 Build-Helper Maven 插件可以帮到您。

有许多目标可用于帮助转换属性。

可能 regex-property是你想要的,但如果你的版本号符合“标准”,那么其他两个可能会拯救你。

使用regex-property目标你会做类似的事情

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <version>1.7</version>
        <executions>
          <execution>
            <id>regex-property</id>
            <goals>
              <goal>regex-property</goal>
            </goals>
            <configuration>
              <name>tag.version</name>
              <value>${project.version}</value>
              <regex>^([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)\.(-SNAPSHOT)?$</regex>
              <replacement>V$1_$2_$3_P$4</replacement>
              <failIfNoMatch>true</failIfNoMatch>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  ...
</project>

注意:我的正则表达式可能略有偏差,因此您应该测试上面的内容。

注意:该属性值仅可用于此执行绑定(bind)到的阶段之后的执行。它绑定(bind)到的默认阶段是 validate 但如果您处于不同的生命周期(例如网站生命周期),则该值将不可用。

关于java - 在 Maven 中,如何在运行时动态构建属性值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12002033/

相关文章:

C# 为类和运算符分配默认属性 =

java - 测试 spring 云流服务的问题

java - Nexus 接受上传但表示失败

java - 递归插入到双向链表的末尾

java - 使用jenkins平台在maven项目中运行spock测试

java - 防止上传中间 Maven Artifact

c# - 属性中使用的变量是否有任何 C# 命名约定?

Qt ENUMS - setProperty 隐式转换

java - 另一个 epl 文件中的 Esper 表达式

java - 源服务器没有找到目标资源的当前表示或不愿意透露存在的表示。关于部署到 tomcat