2008-10-05 13 views
8

Cuando recibo un informe de error o un mensaje de "no funciona", una de mis preguntas iniciales es siempre ¿qué versión? Con una compilación diferente en muchas etapas de prueba, planificación e implementación, esta suele ser una pregunta no trivial.¿Cuál es la mejor manera de almacenar información de la versión de Subversion en EAR?

I el caso de lanzar archivos Java JAR (ear, jar, rar, war) que me gustaría poder buscar en/en el JAR y cambiar a la misma rama, versión o etiqueta que fue la fuente del JAR lanzado

¿Cómo puedo ajustar mejor el proceso de creación de ant para que la información de versión en el checkout svn permanezca en la compilación creada?

yo estaba pensando a lo largo de las líneas de:

  • Adición de un archivo versión, pero con qué contenido?
  • almacenando información en el archivo META-INF, pero ¿bajo qué propiedad con qué contenido?
  • fuentes de copia en el archivo resultado
  • añaden propiedades svn: a todas las fuentes con las palabras clave en los lugares que el compilador hojas de ellos es

Terminé usando el enfoque svnversion (el anwser aceptado), porque escanea todo el subárbol en oposición a la información svn que solo mira el archivo/directorio actual. Para esto, definí la tarea SVN en el archivo ant para que sea más portátil.

<taskdef name="svn" classname="org.tigris.subversion.svnant.SvnTask"> 
    <classpath> 
    <pathelement location="${dir.lib}/ant/svnant.jar"/> 
    <pathelement location="${dir.lib}/ant/svnClientAdapter.jar"/> 
    <pathelement location="${dir.lib}/ant/svnkit.jar"/> 
    <pathelement location="${dir.lib}/ant/svnjavahl.jar"/> 
    </classpath>   
</taskdef> 

No todas las construcciones dan como resultado servicios web. El archivo ear antes de la implementación debe permanecer con el mismo nombre debido a la actualización en el servidor de aplicaciones. Hacer que el archivo sea ejecutable sigue siendo una opción, pero hasta entonces solo incluí un archivo de información de versión.

<target name="version"> 
    <svn><wcVersion path="${dir.source}"/></svn> 
    <echo file="${dir.build}/VERSION">${revision.range}</echo> 
</target> 

Refs:
svnrevision: http://svnbook.red-bean.com/en/1.1/re57.html
SVN SVN información de tareas http://svnbook.red-bean.com/en/1.1/re13.html
Subclipse: http://subclipse.tigris.org/svnant/svn.html
SVN Client: http://svnkit.com/

+0

I Svn ¿Es más portátil que ejecutar "svnversion" como en la respuesta aceptada? –

Respuesta

5

Utilice el comando svnversion en el script Ant para obtener el número de revisión:

<exec executable="svnversion" outputproperty="svnversion" failonerror="true"> 
    <env key="path" value="/usr/bin"/> 
    <arg value="--no-newline" /> 
</exec> 

continuación, utilizar el $ {} svnversion propiedad en algún lugar de su oído. Ponemos en el nombre del archivo EAR, pero también se puede poner en un archivo readme o la versión dentro del oído, o especificar la versión de la EAR META-INF/manifest.mf:

<!-- myapp-r1234.ear --> 
<property name="ear" value="myapp-r${svnrevision}.ear" /> 
1

Desde lo alto de la cabeza. ¿Una etiqueta para cada compilación de jar?

1

Tenemos la primera parte de nuestra creación crear un archivo version.txt en la raíz del paquete y volcar la etiqueta utilizada para verificar el código de (en nuestro caso) CVS ... Además, la parte final de nuestro proceso de compilación comprueba el EAR completamente construido de nuevo en CVS para referencia futura.

De esta manera, si tenemos un problema con una aplicación web, es solo un caso de pedirle al periodista que pulse /app/version.txt - desde allí podemos detallar el historial de compilación en particular en CVS para localizar los componentes relevantes (maneja diferentes versiones de bibliotecas en aplicaciones) para localizar el error.

No estoy seguro de cuánta ayuda es para nuestra gente de apoyo, pero definitivamente es algo de lo que se quejan no ¡estar ahí!

4

Desea proporcionar el número de sucursal y repositorio de Subversion.Como se discutió en How to access the current Subversion build number?, el comando svn info le dará esta información, que luego puede usar para compilar un archivo VERSION o colocarlo en cualquiera de los otros archivos que está creando en sus archivos * AR. Si no tienes nada más en mente, usted podría considerar el uso de la XmlProperty Ant task para extraer la información relevante de la salida de su SVN   información   comando --xml

1

Haz automática construye, y coloque una etiqueta (con una fecha sello) en la base del código cuando la construcción es exitosa (por supuesto, con la prueba unittest).

En su proceso de entrega, solo entregue construcciones etiquetadas al cliente. De esta manera, usted tiene el control y puede colocar el nombre de la etiqueta en un archivo readme.txt en algún lugar, o hacer que el nombre del archivo ear refleje el nombre de la etiqueta.

Personalmente cambié a CVS, y esta es una de las razones. En CVS, puedo hacer que una clase informe que es una etiqueta. Todos mis archivos jar contienen un "principal" que los hace ejecutables. Con preguntas de soporte, le pido al cliente que haga un "java -jar somejar.jar" y me envíe la salida junto con la pregunta.

De esta manera estoy seguro de la construcción que están usando, e incluso puedo tener información como la versión de Java, el tipo de sistema operativo y la versión. Sin que el cliente tenga que responder preguntas extrañas.

Es simple pero muy efectivo.

1

¿Por qué no poner el número de compilación en un archivo de propiedades ... esto puede ser leído fácilmente por java y salir a una Ayuda | Acerca del diálogo (applet/aplicación), pie de página web o cualquier otra GUI que pueda tener.

(Véase el pie de página en cada página SOF .... tiene el número de versión SVN allí.)

Parece una carga más fácil que buscar en el WAR/EAR/JAR etc fácil tiempo?

0

I almacenar la revisión absoluta del repositorio como parte de mi número de versión completo. Esto le da a la gente un vistazo rápido para ver si un cambio dado está en una versión determinada o no.

También almacenamos el número de versión/fecha de compilación/etc en el archivo de manifiesto de la oreja como propiedades personalizadas, estas son principalmente solo informativas. También lo almacenamos en un archivo de propiedades que está integrado en nuestro jar, para que la aplicación pueda leerlo.

3

Consulte el proyecto jreleaseinfo. Contiene una tarea ANT que puede generar una clase java que se puede invocar en tiempo de ejecución para mostrar la información de lanzamiento para su proyecto.

Me gusta su simplicidad.

Cuestiones relacionadas