maven - прочитать номер версии из файла свойств - PullRequest
11 голосов
/ 17 декабря 2011

Я пытаюсь прочитать мой номер версии сборки из текстового файла, а затем назначить его для сгенерированного имени пакета: 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  

In 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>

Что я делаю не так и что я вообще не делаю? Мое понимание Maven очень элементарно (я родом из Ant).

Ответы [ 4 ]

6 голосов
/ 06 января 2012

Просто чтобы ответить на мой собственный вопрос: оказывается, что Maven необходимо установить свойство, прежде чем что-либо произойдет в скрипте. Как таковой, он установлен в камне и не может быть изменен из файла. В итоге я написал задачу Ant, которая изменяет файл pom.xml и изменяет версию в файле до запуска сценария Maven. Гадкий и нетривиальный, но это работает.

4 голосов
/ 20 декабря 2012

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

или просто:


<project>
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>properties-maven-plugin</artifactId>
        <version>1.0</version>
        <executions>
          <execution>
            <phase>initialize</phase>
            <goals>
              <goal>read-project-properties</goal>
            </goals>
            <configuration>
              <files>
                <file>dev.properties</file> <======== IT IS!!!!!
              </files>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

ОБНОВЛЕНИЕ Рабочим доказательством концепции является подпроект в http://sourceforge.net/u/gavenkoa/exp/ci/default/tree/maven/properties/pom.xml

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

0 голосов
/ 05 января 2015

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

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

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

0 голосов
/ 17 декабря 2011

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

<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>

EDIT:
Если вам нужно использовать файл свойств, используйте properties-maven-plugin, посмотрите аналогичный вопрос SO здесь .

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...