ingresar - guardar numeros en un arreglo java
¿Cuál es la mejor manera de almacenar información de la versión de Subversion en EAR? (9)
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.
Es el caso de lanzar archivos Java JAR (ear, jar, rar, war) que me gustaría poder ver en / en el JAR y cambiar a la misma rama, versión o etiqueta que fue la fuente del JAR liberado.
¿Cómo puedo ajustar mejor el proceso de compilación de ant? Para que la información de la versión en el checkout svn permanezca en la compilación creada?
Estaba pensando en la línea de:
- agregando un archivo VERSION, pero ¿con qué contenido?
- almacenar información en el archivo META-INF, pero ¿bajo qué propiedad con qué contenido?
- copiando fuentes en el archivo de resultados
- svn añadido: propiedades para todas las fuentes con palabras clave en lugares donde el compilador las deja estar
Terminé usando el enfoque svnversión (el símbolo 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 compilaciones 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 info http://svnbook.red-bean.com/en/1.1/re13.html
subclipse svn task: http://subclipse.tigris.org/svnant/svn.html
Cliente svn: http://svnkit.com/
Guardo la revisión absoluta del repositorio como parte de mi número de versión completa. 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 del oído 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.
¿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.
(Consulte el pie de página en cada página de SOF ... tiene el número de versión de SVN allí).
Parece una carga más fácil que mirar en WAR / EAR / JAR, etc. ¿es fácil?
Desde lo más alto de mi mente ¿Una etiqueta para cada compilación de jar?
Haga compilaciones automáticas y coloque una etiqueta (con un sello de fecha) en la base del código cuando la compilación sea exitosa (por supuesto, con la prueba de unidad).
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.
Tenemos la primera parte de nuestra compilació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 revisa el EAR completamente construido de nuevo en CVS para referencia futura.
De esta forma, si tenemos un problema con una aplicación web, es solo cuestión de pedirle al periodista que pulse /app/version.txt; a partir de ahí podemos detallar el historial de compilación particular en CVS para ubicar 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 por no estar allí!
Use el comando svnversion en su 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>
Luego use la propiedad $ {svnversion} en algún lugar de su EAR. Lo ponemos en el nombre de archivo EAR, pero también puede colocarlo en un archivo Léame o de versión dentro del EAR, o especificar la versión en META-INF / manifest.mf del EAR:
<!-- myapp-r1234.ear -->
<property name="ear" value="myapp-r${svnrevision}.ear" />
Mira 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.
Desea proporcionar el número de sucursal y repositorio de Subversion. Como se discutió en ¿Cómo acceder al número de versión de Subversion actual? , el comando svn info
le dará esta información, que luego puede usar para crear un archivo VERSION o colocarlo en cualquiera de los otros archivos que está creando en sus archivos * AR. Si no tiene nada más en mente, podría considerar usar la tarea XmlProperty Ant para extraer la información relevante del resultado de su comando svn info --xml
Ver también esta pregunta: Creación y numeración de versiones para proyectos de Java (ant, cvs, hudson)
Incluye varios fragmentos de código útiles.