получить текущую версию SVN в веб-приложение - PullRequest
9 голосов
/ 03 октября 2008

Каков наилучший способ отображения / использования номера редакции в веб-приложении Java?

мы просто используем ant для создания нашего архива .war, без сервера сборки или чего-то подобного. я бы надеялся, что если бы $ ref мог быть записан в файле ресурсов, то это было бы хоть что-то, но это обновляется только тогда, когда рассматриваемый файл фиксируется. Мне нужно это глобально.

что бы вы порекомендовали? триггеры пост-фиксации, которые обновляют определенные файлы? пользовательские сценарии муравья? Есть ли более не хакерский способ сделать это? или лучше иметь собственный номер версии независимо от svn.

редактировать: отличные предложения! Большое спасибо за ответы!

Ответы [ 6 ]

6 голосов
/ 05 октября 2008

Мы используем следующую задачу ant для включения версии svn в атрибут в jar вместе с версией других используемых пакетов

<target name="package" depends="compile" description="Package up the project as a jar">
<!-- Create the subversion version string -->
<exec executable="svnversion" failifexecutionfails="no" outputproperty="version">
  <arg value="."/> 
  <arg value="-n"/>
</exec>
<!-- Create the time stamp -->
<tstamp>
  <format property="timeAndDate" pattern="HH:mm d-MMMM-yyyy"/>
</tstamp>

<jar destfile="simfraserv.jar">
  <manifest>
    <attribute name="Built-By"                value="${user.name} on ${time.date}" />
    <attribute name="Implementation-Version"  value="${svn.version}" />
    <attribute name="Implementation-Java"     value="${java.vendor} ${java.version}" />
    <attribute name="Implementation-Build-OS" value="${os.name} ${os.arch} ${os.version}" />
    <attribute name="JVM-Version"             value="${common.sourcelevel}+" />        
  </manifest>
  <fileset dir="bin">
    <include name="**/*.class"/>
  </fileset>
  <fileset dir="src">
    <include name="**"/>
  </fileset>
</jar>
</target>

И тогда вы можете получить к нему доступ в своем веб-приложении, как это

String version = this.getClass().getPackage().getImplementationVersion();
4 голосов
/ 11 июля 2012

Если вы используете муравья, вы можете определить эту задачу:

 <target name="version">
<exec executable="svn" output="svninfo.xml" failonerror="true">
  <arg line="info --xml" />
</exec>
<xmlproperty file="svninfo.xml" collapseattributes="true" />
<echo message="SVN Revision: ${info.entry.commit.revision}"/>
<property name="revision" value="${info.entry.commit.revision}" />
</target>

и вы значение ревизии, где вы хотите.

3 голосов
/ 03 октября 2008

Есть пара задач Ant, которые могут сделать это за вас.

Задание SvnAnt от Тигра самое старое.

Документация здесь - в частности, посмотрите на элемент info, который представляет номер ревизии хранилища Subversion как свойство Ant, которое он вызывает rev. Вы можете записать это значение в свой файл ресурсов, используя обычные механизмы замены Ant.

Кто-то также поставил задачу simillar (проще) на хостинге кода Google - никогда не использовал ее, поэтому не может комментировать.

Любой из них кажется мне самым подходящим способом, если в вашей сборке уже есть Ant.

1 голос
/ 03 октября 2008

Если вы используете Windows, вы можете посмотреть на SubWCRev.exe, который поставляется с черепахой.

Это дает текущую версию репозитория и заменит $ WCREV $ на сказанное, вы можете включить это в ваш web.xml, как, скажем, контекстный параметр, а затем получить его оттуда.

1 голос
/ 03 октября 2008

См. эту тему .

Мой фаворит из этой ветки - просто добавление $Id:$ в ваш код, где вы хотите указать идентификатор ревизии. SVN заполнит их реальными данными, когда вы выполните экспорт.

0 голосов
/ 04 октября 2008

Перед упаковкой веб-приложения запустите svn info и перенаправьте вывод в какой-либо файл в WEB-INF / classes. Когда веб-приложение запускается, проанализируйте этот файл и спрячьте его в контексте сервлета или в другом подобном месте. В нижней части каждой страницы отобразите эту версию - если вы используете что-то вроде Tiles или SiteMesh, это изменение необходимо выполнить только в одном файле.

Пользователи Maven могут попробовать плагин maven-buildnumber.

...