2014-11-15 2 views
0

Есть ли способ с Maven для анализа внешнего текстового файла и для извлечения переменных с помощью регулярных выражений? Случай использования состоит в том, что у меня есть внешний файл, который нельзя изменить. Этот файл не является файлом proerties, а является файлом C-Header.Maven: Извлечь части текстового файла в переменные

Что бы я хотел сделать, так это то, что maven извлекает части, которые находятся в файле заголовка, в переменную, например, версию и использовать эти переменные во время сборки.

Процесс может выглядеть следующим образом:

  1. Maven считывает заголовочный-файл
  2. Maven извлекает майор версию с помощью регулярного выражения на содержании файлов
  3. Maven извлекает Minor версию с помощью регулярного выражения на содержимое файлов
  4. Maven использует извлеченные майора и малые версии во время сборки.

Я искал сеть, но не нашел решение этого и в настоящее время застрял.

+0

Держу пари, что вам нужно написать специальный плагин maven для этого. –

+0

@AndrewWhite bet lost ;-) –

ответ

1
  1. Используйте Exec Maven Plugin, чтобы прочитать файл заголовка и создать файл свойств из его содержимого.
  2. Используйте файл свойств Properties Maven Plugin, чтобы использовать файл свойств.
+0

Как бы вы использовали Exec таким образом, который не является специфичным для платформы? –

+0

@AndrewWhite Хорошая точка, но OP не упомянул, что она должна быть независимой от платформы. И _ "выполнить [...] Java-программы" _ дает вам независимость от платформы. –

+0

@GeriBroser ваше решение - это решение, поэтому я повышаю его, но я нашел лучший способ сделать это (для меня). Я соглашусь также на вопрос, который получает следующие два upvotes. – fyr

0

Нашли решение, которое удобно для меня использовать groovy maven plugin.

<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> 
Смежные вопросы