Номер сборки Maven, замена в файле не работает - PullRequest
1 голос
/ 05 марта 2020

Я хочу иметь buildNumber из buildnumber-maven-plugin в файле XML.

Я настроил плагин номера сборки. Я вижу, что это работает, потому что finalName устанавливается с номером сборки. Затем я настроил фильтрацию ресурсов. Я вижу, что ресурс deployment.xml фильтруется, потому что он заменяет ${project.version}. Однако это не заменяет ${buildNumber}. Что я должен сделать по-другому, чтобы это работало? Я посмотрел на Плагин номера сборки Maven, как сохранить номер сборки в файле? , но он работает не так, как там, хотя там делается почти то же самое.

pom . xml:

    <!-- build number -->
        <plugin>
           <groupId>org.codehaus.mojo</groupId>
           <artifactId>buildnumber-maven-plugin</artifactId>
           <version>1.4</version>
           <executions>
             <execution>
               <phase>validate</phase>
               <goals>
                 <goal>create</goal>
               </goals>
             </execution>
           </executions>
           <configuration>
             <format>{0,number}</format>
             <items>
                <item>buildNumber</item>
             </items>
             <doCheck>false</doCheck>
             <doUpdate>false</doUpdate>
           </configuration>
        </plugin>
    </plugins>
    <finalName>${project.artifactId}-${project.version}-r${buildNumber}</finalName>
    <resources>
        <resource>
          <directory>src/main/resources</directory>
          <filtering>true</filtering>
          <includes>
            <include>**/deployment.xml</include>
          </includes>
        </resource>
        <resource>
          <directory>src/main/resources</directory>
          <filtering>false</filtering>
          <excludes>
            <exclude>**/deployment.xml</exclude>
          </excludes>
        </resource>
    </resources>
</build>
<!-- dummy scm for build number plugin -->
<scm>
   <connection>scm:git:http://127.0.0.1/dummy</connection>
   <developerConnection>scm:git:https://127.0.0.1/dummy</developerConnection>
   <tag>HEAD</tag>
   <url>http://127.0.0.1/dummy</url>
</scm>

src / main / resources / deploy. xml

<root>
    <build>
        <buildNumber>${buildNumber}</buildNumber>
        <buildNumber>${project.version}</buildNumber>
        <buildNumber>${project.finalName}</buildNumber>
    </build>
</root>

target / classes / deploy. xml

<root>
    <build>
        <buildNumber>${buildNumber}</buildNumber>
        <buildNumber>1.0.0-BUILD-SNAPSHOT</buildNumber>
        <buildNumber>${project.finalName}</buildNumber>
    </build>
</root>

Теперь я заметил кое-что странное: во время установки maven номер сборки сначала заменяется на файл XML, а затем файл XML снова заменяется на файл XML выше, в котором ${buildNumber} не заменен.

Я попытался отключить дополнительные шаги копирования, но, похоже, это не дает ожидаемого эффекта (у меня все еще есть та же проблема):

[INFO] --- maven-resources-plugin:3.1.0:copy-resources (copy-resources) @ rator ---
[INFO] Using 'Cp1252' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] Copying 83 resources
[INFO] 
[INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ rator ---
[INFO] Skipping the execution.
[INFO] 
.. compiling ..
[INFO] 
[INFO] --- maven-resources-plugin:3.1.0:testResources (default-testResources) @ rator ---
[INFO] Not copying test resources
[INFO] 

Я смотрел на целевые / классы. Кажется, номер сборки правильно упакован в файл war, когда я смотрю на target/xxx-1.0.0-BUILD-SNAPSHOT-r36/WEB-INF/classes/deployment.xml. Я думаю, я могу жить с этим, хотя я до сих пор не понимаю, почему файл target/classes/deployment.xml воссоздается после замены buildNumber.

Больше странностей: когда я редактирую src/main/resources/deployment.xml, то файл target/classes/deployment.xml также обновляется. Должно быть что-то сделано в IDE Eclipse?

Я перенес развертывание. xml в resources-filtered/deployment.xml, но перезапись сохраняется.

1 Ответ

1 голос
/ 05 марта 2020

Есть раздел свойств в вашем xml. Таким образом, вы сообщаете Maven о своих пользовательских свойствах, которые будут заменены во время сборки.

<project>
  <properties>
      <buildNumber>YOUR_BUILD_NUMBER</buildNumber>
      <anotherProperty>foo</anotherProperty>
  </properties>
</project>

См. https://maven.apache.org/pom.html#Properties

Вот неофициальный список предопределенных Maven свойства: https://github.com/cko/predefined_maven_properties/blob/master/README.md

...