Подтвердить что ты не робот

Что такое хороший способ обработки номера версии в приложении Java?

Я разрабатываю настольное приложение с использованием Java и Swing Application Framework. У меня есть приложение о коробке, и я хотел бы, чтобы в этом поле содержалось некоторое указание на то, какая версия тестируется. Я предпочитаю, чтобы это значение было изменено автоматическим способом. Я использую CruiseControl для создания приложения, вызванного коммитами SVN.

Какой механизм для других используют для выполнения этой работы? Есть ли в библиотеке номер версии или набор ant связанных инструментов, которые я могу просто добавить в свой процесс сборки?

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

4b9b3361

Ответ 1

Я начну этот пост, заявив, что я использую Apache Maven для сборки. Вы также можете сделать подобное с помощью Ant или другого инструмента, но это то, что я сделал с помощью maven.

Лучший способ, с помощью которого я нашел это, - использовать версию вашего проекта плюс ревизию subversion как номер сборки. Из maven вы можете включить следующее. Это даст вам номер ревизии subversion как ${scm.revision}.

<build>
    <plugins>
      <plugin>
        <artifactId>maven-scm-plugin</artifactId>
        <executions>
          <execution>
            <id>getting-scm.revision</id>
            <phase>validate</phase>
            <goals>
              <goal>update</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

После этого я затем использую это как часть манифеста файла jar в качестве версии реализации.

  <plugin>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.1</version>
    <configuration>
      <archive>
        <manifestEntries>
          <Implementation-Version>${this.version}.${scm.revision}</Implementation-Version>
        </manifestEntries>
      </archive>
    </configuration>
  </plugin>

Самое приятное в том, что вы можете получить доступ к этому из кода, используя следующее:

Package p = getClass().getPackage();
String version = p.getImplementationVersion();

Это дает вам полный номер сборки, например, "1.0.13525", где последним номером является ревизия subversion. Для получения дополнительной информации об установке этого параметра вы можете просмотреть полный пост в блоге Я сделал некоторое время назад по этой самой проблеме.

Ответ 2

Создайте конструкцию script, создав файл свойств, содержащий версию. Это хорошая идея, чтобы захватить ревизию # прямо из SVN. Таким образом, вы можете ссылаться на него в тестах. Поместите этот файл свойств в упакованную банку и прочитайте ее во время выполнения. Обычно у вас есть основные и второстепенные версии, заданные как параметры для ant script, когда ревизия управляется автоматически SVN и дает согласованный номер сборки для ссылок.

Эта цель фрагмента запускает командную строку svn и выводит в файл temp (svndump). Затем создав строку xx.yy.zz, поместите ее в другой файл, который позже будет включен в jar. Обратите внимание, что xx.yy берутся из внешних параметров, это майорно-младшая версия.

<target name="getrev">
    <exec executable="svn" output="svndump">
        <arg value="info"/>
        <arg value="${my.svn.url}"/>
    </exec>

    <property file="svndump"/>
    <property name="my.build" value="${Revision}"/>
    <property name="my.rev" value="${my.ver}.${my.build}"/>
    <echo message="current revision is ${my.rev}"/>

    <property name="my.dir.dist" value="${my.dir.root}/dist/${my.rev}"/>
    <echo message="${my.rev}" file="${my.dir.projects}/revision"/>

    <delete file="svndump"/>
</target>

Ответ 3

С Maven я использовал buildnumber-maven-plugin, который получает номер версии из Subversion или использует последовательность или временную метку, которая затем используется вместо замены ${buildNumber}, где бы вы ни находились. Я полагаю, что другие инструменты сборки и серверы непрерывной интеграции имеют схожие функции. Найдите свою любимую поисковую систему с номером сборки "< your-tool > ".

Ответ 4

Вы делаете это слишком сложно. SVN предоставляет номер версии в виде макроса, например CVS.

Создайте простой inverface, содержащий константу, и создайте экземпляр SVN, который через макрос, например

public interface IVersionNumber {
    public static final String version = "$Id$" ;
}

Вам нужно указать SVN, чтобы использовать ключевые слова в этом файле, так как

$svn propset svn: ключевые слова "Id" IVersion.java

Вы можете прочитать о свойствах здесь.

Ответ 5

Мы долгое время использовали JReleaseInfo. Вы можете настроить его в своем Ant script (мы не используем Maven для наших проектов), и он автоматически ударяет номер версии. Он также имеет некоторые приятные дополнения в том, что он генерирует класс, содержащий всю информацию. Вы можете просто вызвать этот класс в своем коде, чтобы получить строки, готовые к использованию, или вызвать класс из командной строки, чтобы распечатать номер версии без необходимости менять код.

Ответ 6

Поскольку я использую круиз-контроль и Ant, чтобы построить все, я закончил, по крайней мере, сейчас, используя свойство ${label}, переданное в вызов ant для строительства проекта. В моем файле ant я использую ant "replace" task, чтобы изменить файл свойств, содержащий ресурс about box с именем Application.версия, чтобы включить эту метку.

Я планирую перейти от приращения меток к svn label incrementer, а затем используйте номер версии svn таким образом. Это всего лишь немного больше работы, и для меня требуется внести изменения в конфигурационный файл круиз-контроля.