2013-08-07 2 views
3

Есть ли способ иметь maven pad числовое значение (например: номер сборки) в POM? Я искал тему и ничего не придумал.Номер пэда с нулями в Maven

Мое использование является следующим. В процессе сборки maven предоставляется номер сборки через Jenkins, который должен быть включен как часть названия WAR, которое сгенерировано. Поэтому, если я предоставил ему 12 в качестве номера сборки, тогда я хочу, чтобы имя файла WAR было myWar ## 000012.war. Часть имени ## 000012 - это идентификатор версии, используемый Tomcat.

+0

Зачем вам такой номер сборки? У вас есть версия, которая уникальна. Кроме того, я надеюсь, что вы используете систему контроля версий, в которой есть метки/метки и т. Д., Которые следует использовать в качестве ссылок. – khmarbaise

+0

У нас есть все преимущества системы управления изменениями (maven, CI, непрерывное развертывание и т. Д.) – jwmajors81

ответ

1

Простейшим решением может быть внедрение языка сценариев в сборку. Например, с помощью Groovy, если у вас есть buildNumber свойство:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>groovy-maven-plugin</artifactId> 
    <version>1.5</version> 
    <executions> 
    <execution> 
    <phase>validate</phase> 
    <goals><goal>execute</goal></goals> 
    <configuration> 
     <source> 
     project.properties['nameSuffix'] = "##" + String.format("%06d", project.properties['buildNumber'].toLong()); 
     </source> 
    </configuration> 
    </execution> 
    </executions> 
    </plugin> 

После этого nameSuffix свойство доступно для определения окончательного названия.

В качестве альтернативы, как предложено в In Maven, how can I dynamically build a property value at runtime?, используйте build-helper:regex-property для преобразования строки.

+0

+1: Хорошее и аккуратное простое решение. – carlspring

0

Вы пробовали использовать плагин maven release?

+0

Я только что просмотрел часть документации на веб-сайте для плагина выхода maven, и я не вижу, как она решает мою проблему. Была ли какая-то особенность плагина, который я должен исследовать? – jwmajors81

+0

См. Часть страницы, которую я назвал «Переопределение формата имени тега по умолчанию». – codethulhu

0

Основываясь на предложении @Joe, я заглянул в плагин build-helper-maven и смог придумать следующее, что делает то, что мне нужно. Я не смог определить, как сделать все это за один шаг, поэтому я делаю это в 2. Первый шаг выравнивает значение слева нулями. Второй шаг обрезает числовое значение так, чтобы оно было всего 7 цифр. Обратите внимание, что $ {build.env.version} передается как параметр для процесса сборки maven и что я по умолчанию задал 0 в POM-файле, когда он не передан. Если вы не указали значение по умолчанию, то сборка завершится неудачно, хотя failOnError имеет значение false.

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <version>1.8</version> 
    <executions> 
     <execution> 
     <id>stage1--padNumber</id> 
     <goals> 
      <goal>regex-property</goal> 
     </goals> 
     <configuration> 
      <name>build.env.version.padded</name> 
      <value>${build.env.version}</value> 
      <regex>^([\d]{0,})$</regex> 
      <replacement>000000$1</replacement> 
      <failIfNoMatch>false</failIfNoMatch> 
      <failOnError>false</failOnError> 
     </configuration> 
     </execution> 
     <execution> 
     <id>stage2--leftTrimToXcharacters</id> 
     <goals> 
      <goal>regex-property</goal> 
     </goals> 
     <configuration> 
      <name>build.env.version.padded</name> 
      <value>${build.env.version.padded}</value> 
      <regex>^([\d]*)([\d]{7})$</regex> 
      <replacement>$2</replacement> 
      <failIfNoMatch>false</failIfNoMatch> 
      <failOnError>false</failOnError> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 
0

На основе @ jwmajors81 предложение, мне нужно раздуть главную версию по определенной причине ...

Как мы уже использовали в билд-хелперов-Maven-плагин, достаточно легко получить основную версию, используя цель синтаксического анализа для помощника сборки. (нам нужны только 3 символа):

 <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>build-helper-maven-plugin</artifactId> 
      <version>1.8</version> 
      <executions> 
       <execution> 
        <id>parse-version</id> 
        <goals> 
         <goal>parse-version</goal> 
        </goals> 
       </execution> 
       <execution> 
        <id>stage1--padNumber</id> 
        <goals> 
         <goal>regex-property</goal> 
        </goals> 
        <configuration> 
         <name>build.env.version.padded</name> 
         <value>${parsedVersion.majorVersion}</value> 
         <regex>^([\d]{0,})$</regex> 
         <replacement>00$1</replacement> 
         <failIfNoMatch>false</failIfNoMatch> 
         <failOnError>false</failOnError> 
        </configuration> 
       </execution> 
       <execution> 
        <id>stage2--leftTrimToXcharacters</id> 
        <goals> 
         <goal>regex-property</goal> 
        </goals> 
        <configuration> 
         <name>build.env.version.padded</name> 
         <value>${build.env.version.padded}</value> 
         <regex>^([\d]*)([\d]{3})$</regex> 
         <replacement>$2</replacement> 
         <failIfNoMatch>false</failIfNoMatch> 
         <failOnError>false</failOnError> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
Смежные вопросы