Maven:将文本文件的一部分提取到变量中

时间:2014-11-15 07:54:20

标签: regex maven

Maven是否有办法解析外部文本文件并使用正则表达式提取变量?用例是我有一个无法更改的外部文件。此文件不是proerties文件,而是C-Header文件。

我想要做的是maven将头文件中的部分提取到变量(如版本)并在构建期间使用此变量。

该过程可能如下所示:

  1. Maven读取头文件
  2. Maven使用提取主要版本 关于文件内容的正则表达式
  3. Maven使用提取Minor版本 关于文件内容的正则表达式
  4. Maven使用提取的Major和Minor 版本期间的版本。
  5. 我确实搜索了网络,但没有找到解决方案,目前卡住了。

2 个答案:

答案 0 :(得分:1)

  1. 使用Exec Maven Plugin读取头文件并从其内容创建属性文件。
  2. 使用Properties Maven Plugin来使用属性文件。

答案 1 :(得分:1)

找到一个方便我使用 groovy maven插件的解决方案。

<plugin>
    <groupId>org.codehaus.gmaven</groupId>
    <artifactId>groovy-maven-plugin</artifactId>
    <version>2.0</version>
    <executions>
        <execution>
            <phase>process-classes</phase>
            <goals>
                <goal>execute</goal>
            </goals>
            <configuration>
                <defaults>
                    <name>Xenu</name>
                </defaults>
                <source>
                    String fileContents = new File("${project.basedir}/../include/version.h").getText('UTF-8')
                    matcher = (fileContents =~ /(?s).*MAJOR ([0-9]+).*?/)
                    String major_version = matcher.getAt(0).getAt(1)
                    matcher = (fileContents =~ /(?s).*MINOR ([0-9]+).*?/)
                    String minor_version = matcher.getAt(0).getAt(1)
                    matcher = (fileContents =~ /(?s).*PATCH ([0-9]+).*?/)
                    String patch_version = matcher.getAt(0).getAt(1)
                    String version = String.format('%s.%s.%s', major_version, minor_version, patch_version)
                    // Set version to be used in pom.properties
                    project.version = version
                    // Set version to be set as jar name
                    project.build.finalName = project.artifactId + "-" + version
                </source>
            </configuration>
        </execution>
    </executions>
</plugin>