2014-11-15 33 views
0

Maven是否有解析外部文本文件並使用正則表達式提取變量的方法?用例是我有一個無法更改的外部文件。這個文件不是一個proerties文件,而是一個C頭文件。Maven:將文本文件的部分提取到變量

我想要做的是,Maven將頭文件中的部分提取到變量中,如版本,並在構建過程中使用這些變量。

的過程可能是這樣的:

  1. Maven的讀取頭文件
  2. Maven的提取使用上的文件內容 正則表達式
  3. Maven的提取使用 正則表達式的次要版本的主要版本文件內容
  4. Maven在構建期間使用提取的主版本和次版本 版本。

我沒有搜索網絡,但沒有找到解決方案,目前卡住了。

+0

我敢打賭,你將不得不爲這個編寫一個特殊的maven插件。 –

+0

@AndrewWhite投注丟失;-) –

回答

1
  1. 使用Exec Maven Plugin來讀取頭文件並從其內容創建屬性文件。使用Properties Maven Plugin來使用屬性文件。
+0

你會如何使用Exec的方式不是平臺特定的? –

+0

@AndrewWhite好點,但OP沒有提到它必須是平臺無關的。和_「執行Java程序」_讓您獨立於平臺。 –

+0

@GeriBroser你的解決方案是一個解決方案,因此我upvote它,但我找到了一個更好的方式來做到這一點(對我來說)。我也會接受接下來兩個投票的問題。 – fyr

0

找到了一個方便我使用的解決方案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>