get la revisión svn actual en webapp

¿Cuál es la mejor manera de mostrar / usar el número de revisión en una aplicación web java?

solo usamos ant para build nuestro file .war, no server de compilation o tal. Espero que haya algún tipo de $ ref que pueda escribir en un file de resources, pero esto solo se actualiza cuando se confirma el file en cuestión. lo necesito globalmente

¿qué recomendarías? Desencadenantes post-commit que actualizan ciertos files? scripts de ants personalizadas? ¿Hay una forma más no hacky de hacer esto? o es mejor tener mi propio número de versión independiente de svn.

editar: ¡excelentes sugerencias! ¡Muchas gracias por las respuestas!

Hay un par de tareas Ant que pueden hacer esto por usted.

La tarea de SvnAnt del tigris es la más antigua.

La documentation está aquí , en particular, eche un vistazo al elemento de info que expone el número de revisión del depósito Subversion como una propiedad Ant que llama rev . Puede escribir este valor en su file de resources usando los mecanismos de sustitución Ant normales.

Alguien también ha puesto una tarea similar (más simple) en el alojamiento de código de google; nunca la ha usado, por lo que no puede comentar.

Cualquiera de estos me parece la mejor manera si ya tienes Ant en tu compilation.

Usamos la siguiente tarea ant para include la versión svn en un atributo en el contenedor, junto con la versión de otros packages que se están utilizando.

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

Y luego puedes acceder a él en tu aplicación web de esta manera

 String version = this.getClass().getPackage().getImplementationVersion(); 

Si estás usando una ant puedes definir esta tarea:

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

y usted el valor de revisión donde lo desee.

Ver este hilo

Mi favorito de ese hilo es simplemente tirar $Id:$ en tu código donde quieres la ID de revisión. SVN completará eso con los datos reales cuando realice una export.

Si está utilizando Windows podría mirar SubWCRev.exe que viene con la tortuga.

Le da a la revisión del repository actual y replaceá $ WCREV $ con dicho, podría include esto en su web.xml como decir un parámetro de context y luego getlo desde allí.

Antes de empaquetar la aplicación web, ejecute svn info y networkingirija la salida a algún file en WEB-INF / classes. Cuando se inicia la aplicación web, analice este file y guárdelo en el context del servlet o en algún otro lugar similar. En el pie de página de cada página, muestre esta versión: si está utilizando algo como Tiles o SiteMesh, este cambio debe hacerse solo en un file.

Los usuarios de Maven pueden probar el plugin maven-buildnumber.