3

要求是我必须使用正则表达式解析系统属性才能从值中删除点。

执行示例为: mvn install -Dsomeversion=1.3

pom.xml 配置为:

<plugin>
 <groupId>org.codehaus.mojo</groupId>
 <artifactId>build-helper-maven-plugin</artifactId>
 <version>1.8</version>
 <executions>
  <execution>
   <id>regex-property</id>
   <goals>
    <goal>regex-property</goal>
   </goals>
   <configuration>
    <name>someversion.parsed</name>
    <value>$\{someversion}</value>
    <regex>(.*)[\._](.*)</regex>
    <replacement>$1$2</replacement>
    <failIfNoMatch>false</failIfNoMatch>
   </configuration>
  </execution>
 </executions>
</plugin>

根据插件的文档,美元符号后必须有反斜杠<value>

问题是:

  1. 当有反斜杠时,系统属性不被解析
  2. 如果我删除反斜杠:
    a)系统属性解析成功
    b)如果执行“mvn install”,我收到参数“value”丢失或不正确的错误,尽管我已经配置了<failIfNoMatch>false</failIfNoMatch>

任何反馈将不胜感激

先感谢您

4

1 回答 1

7

经过一些测试,我得出以下结论:

  • 没有看到说明 '\' 应该遵循 '$' 符号的文档(也许你可以指出它),所以我删除了它:),无论如何通常通过 - '\' 实现的转义与下一个而不是上一个相关性格,据我所知
  • 对于您看到的错误mvn install是 config 属性的值<failIfNoMatch>无关

<failIfNoMatch>决定,如果系统属性存在但不是预期的格式,我应该失败吗?它不包括财产根本不存在的情况。然而为此目的,在 Maven 中存在所谓的配置文件,这些可以以不同的方式激活,其中之一是系统属性存在。

因此,以下内容为我完成了这项工作:

<?xml version="1.0" encoding="UTF-8"?>
<project
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0       http://maven.apache.org/maven-v4_0_0.xsd"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0">
    <modelVersion>4.0.0</modelVersion>
    <groupId>sample</groupId>
    <artifactId>sample</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <profiles>
        <profile>
            <activation>
                <property>
                    <name>someversion</name>
                </property>
            </activation>

            <build>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>build-helper-maven-plugin</artifactId>
                        <version>1.8</version>
                        <executions>
                            <execution>
                                <id>regex-property</id>
                                <goals>
                                    <goal>regex-property</goal>
                                </goals>
                                <configuration>
                                    <name>someversion.parsed</name>
                                    <value>${someversion}</value>
                                    <regex>(.*)[\._](.*)</regex>
                                    <!-- <regex>notmatched</regex>-->
                                    <replacement>$1$2</replacement>
                                    <failIfNoMatch>false</failIfNoMatch>
                                    <!--<failIfNoMatch>true</failIfNoMatch>-->
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <version>1.7</version>
                        <executions>
                            <execution>
                                <phase>validate</phase>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                                <configuration>
                                    <tasks>
                                        <echo>******** Displaying value of property ********</echo>
                                        <echo>${someversion.parsed}</echo>
                                    </tasks>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>


</project>

请注意,maven-antrun-plugin这只是为了显示调试输出。

现在进行一些测试:

mvn install -Dsomeversion=1.3
...
main:
     [echo] ******** Displaying value of property ********
     [echo] 13
[INFO] Executed tasks
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
...

对于无系统属性版本:

mvn install
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
...

如果我的 pom.xml 中没有特殊的配置文件,我会得到以下输出:

mvn install
...
INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] One or more required plugin parameters are invalid/missing for 'build-helper:regex-property'

[0] Inside the definition for plugin 'build-helper-maven-plugin' specify the following:

<configuration>
  ...
  <value>VALUE</value>
</configuration>

-OR-

on the command line, specify: '-Dsomeversion=VALUE'
...

只是为了让事情变得完整,以防我在我的解决方案中使用(目前已注释掉)<regex>notmatched</regex>以及<failIfNoMatch>true</failIfNoMatch>

mvn install -Dsomeversion=1.3
...
[INFO] ------------------------------------------------------------------------
[INFO] Building Unnamed - sample:sample:pom:1.0.0-SNAPSHOT
[INFO]    task-segment: [install]
[INFO] ------------------------------------------------------------------------
[INFO] [build-helper:regex-property {execution: regex-property}]
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] No match to regex 'notmatched' found in '1.3'.
[INFO] ------------------------------------------------------------------------
...

请注意,最后 2 个错误不同 - 一个是缺少属性,另一个是不匹配的正则表达式。

总而言之,我相信这build-helper-maven-plugin可以按预期工作。

于 2013-07-09T06:34:59.677 回答