Maven – прочитать номер версии из файла свойств

Я пытаюсь прочитать номер версии сборки из текстового файла, а затем назначить ему имя сгенерированного пакета: myRelease-1.1.1.apk, где номер сборки вручную устанавливается в файл свойства version.number = 1.1.1 Как я могу перегрузить $ {version.number} как установленный в pom.xml тем, который находится в файле свойств?

Изменить: более подробную информацию о проекте. Я использую git для фиксации файла свойств, а затем Дженкинс берет на себя и строит с Maven. Я хотел бы закончить сборку «myBuild-9.9.9.apk». Прямо сейчас у меня есть «myBuild-1.1.2.apk» В extras / version.properties

project.version=9.9.9 

В pom.xml

 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> ..... <version>1.1.2</version> </parent> <groupId>ca.lapresse.android</groupId> <artifactId>lapresse-hockey-app</artifactId> <packaging>apk</packaging> <name>La Presse Hockey - App</name> <version>1.1.2</version> 

…… Кажется, что ${project.artifactId} принимает номер версии из <version></version> и становится 1.1.2. Это должно быть отражено в ${project.version} , который я пытаюсь перегрузить из файла свойства.

 <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>properties-maven-plugin</artifactId> <version>1.0-alpha-2</version> <executions> <execution> <phase>process-resources</phase> <goals> <goal>read-project-properties</goal> </goals> <configuration> <files> <file>${project.basedir}/extras/version.properties</file> </files> </configuration> </execution> </executions> </plugin> для <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>properties-maven-plugin</artifactId> <version>1.0-alpha-2</version> <executions> <execution> <phase>process-resources</phase> <goals> <goal>read-project-properties</goal> </goals> <configuration> <files> <file>${project.basedir}/extras/version.properties</file> </files> </configuration> </execution> </executions> </plugin> 

Что я делаю неправильно и что я вообще не делаю? Мое понимание Maven очень рудиментарно (я исхожу из фона Ant).

Solutions Collecting From Web of "Maven – прочитать номер версии из файла свойств"

Чтобы ответить на мой собственный вопрос: выясняется, что Maven нуждается в настройке свойства, прежде чем что-либо может произойти в скрипте. Как таковой, он установлен в камне и не модифицируется из файла. Я закончил писать задачу Ant, которая модифицирует pom.xml и изменяет версию в файле, прежде чем запускается скрипт Maven. Уродливый и нетривиальный, но он работает.

Прочтите следующие ответы:

  • Настройки пользователя и проекта в Maven
  • Как прочитать файл внешних свойств в Maven
  • Чтение файла свойств из файла Maven POM
  • Прочитайте файл в свойстве Maven

или просто:


 <Проект>
   <Построить>
     <Плагины>
       <Плагин>
         <Идентификатор_группы> org.codehaus.mojo </ идентификатор_группы>
         <Артефакт> свойства-Maven-плагин </ артефакт>
         <Версия> 1,0 </ версия>
         <казни>
           <Исполнение>
             <Фаза> Initialize </ фаза>
             <цели>
               <Цель> для чтения проекта-свойства </ цель>
             </ Цели>
             <Конфигурация>
               <файлы>
                 <Файл> dev.properties </ file> <======== ЭТО ЭТО !!!!!
               </ Файлы>
             </ Конфигурация>
           </ Выполнение>
         </ Расстрелы>
       </ Плагин>
     </ Плагины>
   </ Строительство>
 </ Проект>

UPDATE Рабочее доказательство концепции – это подпроект по адресу http://sourceforge.net/u/gavenkoa/exp/ci/default/tree/maven/properties/pom.xml

Запустите сборку как mvn compile , проверьте pom.xml и консольный вывод.

Поскольку у вас уже есть pom.xml, вам не нужен еще один дополнительный файл свойств для определения такого простого свойства, используйте тег свойств POM и переопределите конструкцию final finalName по умолчанию:

 <properties> <final.build.version>1.1.1</final.build.version> </properties> <build> ... ... <finalName>${project.artifactId}-${final.build.version}</finalName> ... ... </build> 

Если вы используете знак maven и zipalign ваш последний apk на этапе выпуска и хотите переопределить конечное имя здесь, используйте:

 <build> <plugins> <plugin> <groupId>com.jayway.maven.plugins.android.generation2</groupId> <artifactId>android-maven-plugin</artifactId> <extensions>true</extensions> <inherited>true</inherited> <configuration> <undeployBeforeDeploy>true</undeployBeforeDeploy> <sign> <debug>false</debug> </sign> <zipalign> <verbose>true</verbose> <inputApk>${project.build.directory}/${project.artifactId}-${final.build.version}.apk</inputApk> <outputApk>${project.build.directory}/${project.artifactId}-${final.build.version}-signed-aligned.apk</outputApk> </zipalign> </configuration> <executions> <execution> <id>alignApk</id> <phase>package</phase> <goals> <goal>zipalign</goal> </goals> </execution> </executions> </plugin> </plugins> </build> 

РЕДАКТИРОВАТЬ:
Если вам нужно использовать файл свойств, используйте свойства-maven-plugin, посмотрите аналогичный SO-вопрос здесь .

Надеюсь, эта помощь.

Я обнаружил, что могу обойти эту проблему в maven, используя материал о чтении из предложенного выше файла, который работает для «фильтрации» (помещая материал в файл шаблона свойств), поэтому мое приложение знает, какая версия это, несмотря на путаницу maven ,

Причина, по которой я хотел в файле pom, – поместить номер версии в пару миниатюрных имен файлов javascript, чтобы они не получали кеширование обновлений версий … строго говоря, это не требует фактического номера версии, поэтому я использовал ${maven.build.timestamp} который выводит дату + время сборки в yyyymmdd-hhmm .

Я думаю, что если бы мне было нужно что-то более сложное, я бы начал собирать вещи в msbuild или что-то подобное вместо этого … Maven не делает вещи легкими, и после года сражения я не чувствую, что все становится лучше.