2011-12-16 3 views
10

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

Редактировать: подробно о проекте . Я использую git для фиксации файла свойств, а затем Дженкинс берет на себя и строит с Maven. Я хотел бы завершить сборку «myBuild-9.9.9.apk». Сейчас у меня есть «myBuild-1.1.2.apk» В статистов/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> 

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

+1

не вопрос платформы андроида –

+0

Почему downvote? –

+0

Он относится к Android-сборке, упакованной Maven, но может быть неточно помечен как Android, а также – alex

ответ

5

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

+0

Вместо этого вы должны использовать плагин release, потому что рабочий цикл по умолчанию должен иметь 1.1.1-SNAPSHOT во время разработки, и версия будет иметь версию 1.1.1. Этого можно добиться, используя плагин release, который делает это автоматически. Если вам не нравится использовать плагин release, вы можете использовать плагин version-maven для изменения версий в вашем pom. – khmarbaise

+0

Я пытаюсь прочитать номер моей версии сборки из текстового файла, не знаю, как могут помочь плагины. – alex

0

Как вы уже получили pom.xml, вам не нужны другие дополнительные свойства файла для определения такой простой собственности, использовать POM в свойства тега и переопределения сборки по умолчанию 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> 

EDIT:
Если вы должны использовать файл свойств, использовать свойства-Maven-плагин, проверьте аналогичный SO вопрос here.

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

+2

Мне нужен этот файл для других целей. Свойство в нем повторно используется другими скриптами. Он заносится вручную разработчиками. Номер последней версии использует его и добавляет некоторые другие quallifiers, такие как метка времени. – alex

+0

@alex, ответ отредактирован. – yorkw

+0

Это действительно то, как я читаю значение, но кажется, что, хотя я могу его прочитать, я не могу подставить значение, определенное в .pom – alex

4

прочитанной следующие ответы:

или просто:

 

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

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

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

+0

это не работает, если вам нужно сослаться на свойство в файле pom ... не тратьте время на чтение этих других сообщений, если вам нужно это –

+0

@ JonnyLeeds Вы уверены? Проверьте мой подпроект: http://sourceforge.net/u/gavenkoa/exp/ci/default/tree/maven/properties/pom.xml для проверки этого. Запустите его с помощью 'mvn compile' и вы увидите значения свойств из внешних файлов. Но я согласен с тем, что 'properties-maven-plugin' имеет проблемы, а система сборки Maven очень ограничена в расширяемости. – gavenkoa

+0

Я имел в виду сообщения, на которые вы ссылаетесь - я не могу использовать это, потому что он ожидает файл свойств, а не просто текстовый файл. Это использование плагина, который делает эту работу. Он определенно не делает что-то вроде: 'project.properties.put (" versionNumber ", new File (" version "). GetText())' –

0

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

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

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

Смежные вопросы