Un proceso definido es una de las herramientas más necesarias pero a menudo menos utilizadas en el desarrollo de software. Es por naturaleza una tarea general que acompaña a un esfuerzo de desarrollo. Un proceso de compilación definido garantiza que el software de su proyecto de desarrollo se compile exactamente de la misma manera cada vez que se ejecuta una compilación. A medida que el proceso de compilación se vuelve más complejo, por ejemplo, con compilaciones de EJB o tareas adicionales, se vuelve más necesario lograr dicha estandarización. Debe establecer, documentar y automatizar la serie exacta de pasos tanto como sea posible.
¿Por qué necesito un proceso de construcción definido?
Un proceso de compilación definido es una parte esencial de cualquier ciclo de desarrollo porque ayuda a cerrar la brecha entre los entornos de desarrollo, integración, prueba y producción. Un proceso de compilación por sí solo acelerará la migración de software de un entorno a otro. También elimina muchos problemas relacionados con la compilación, classpath o propiedades que cuestan tiempo y dinero a muchos proyectos.
¿Qué es Ant?
Ant es una herramienta de scripting independiente de la plataforma que le permite construir sus scripts de compilación de la misma manera que la herramienta "make" en C o C ++. Puede utilizar una gran cantidad de tareas integradas en Ant sin ninguna personalización. Algunas de las tareas más importantes se muestran en la siguiente tabla, pero se explican con más detalle en el ejemplo siguiente.
Aquí hay algunos comandos útiles que están integrados en la distribución Ant.
Mando | Descripción |
---|---|
Hormiga | Se utiliza para ejecutar otro proceso de hormigas desde el actual. |
Copydir | Se utiliza para copiar un directorio completo. |
Copiar archivo | Se utiliza para copiar un solo archivo. |
CV | Maneja paquetes / módulos recuperados de un repositorio CVS. |
Eliminar | Elimina un solo archivo o todos los archivos de un directorio específico y sus subdirectorios. |
Deltree | Elimina un directorio con todos sus archivos y subdirectorios. |
Ejecutivo | Ejecuta un comando del sistema. Cuando se especifica el atributo os, el comando solo se ejecuta cuando Ant se ejecuta en uno de los sistemas operativos especificados. |
Obtener | Obtiene un archivo de una URL. |
Tarro | Frascos de un conjunto de archivos. |
Java | Ejecuta una clase Java dentro de la VM (Ant) en ejecución o bifurca otra VM si se especifica. |
Javac | Compila un árbol de origen dentro de la máquina virtual (Ant) en ejecución. |
Javadoc / Javadoc2 | Genera documentación de código usando la herramienta javadoc. |
Mkdir | Hace un directorio. |
Propiedad | Establece una propiedad (por nombre y valor) o un conjunto de propiedades (del archivo o recurso) en el proyecto. |
Rmic | Ejecuta el compilador rmic para una determinada clase. |
Tstamp | Establece las propiedades DSTAMP, TSTAMP y TODAY en el proyecto actual. |
Estilo | Procesa un conjunto de documentos a través de XSLT. |
Si bien hay otras herramientas disponibles para realizar compilaciones de software, Ant es fácil de usar y se puede dominar en minutos. Además, Ant le permite crear una funcionalidad ampliada al ampliar algunas de sus clases. Mostraré esta expansión en el siguiente ejemplo.
¿Qué necesito para usar Ant?
Debe instalar tres componentes en su máquina para ejecutar Ant: JDK, analizador XML y Ant (consulte Recursos para obtener enlaces).
En muchos casos, el analizador XML es parte de los archivos lib distribuidos con el servidor Servlet o el servidor web. Si no, el analizador XML gratuito de java.sun.com es suficiente.
La instalación de Ant consiste en descargar los archivos, agregar las bibliotecas de clases a la ruta de clases y agregar los binarios de Ant a la ruta.
Escenario de ejemplo
Este escenario de ejemplo debería ayudarlo a mostrarle el valor de Ant y brindarle información sobre sus beneficios y cómo puede usarlo.
Debido a que una gran parte del desarrollo actual de Java se centra en Java del lado del servidor, he elegido una aplicación del lado del servidor para el ejemplo. Los desarrolladores que trabajan en aplicaciones Java del lado del servidor suelen estar interesados en la compilación de servlets, el despliegue de archivos JSP y el despliegue de archivos HTML, archivos de configuración o imágenes.
Un esquema común para hacer esta compilación implicaría el desarrollo de pequeños scripts en lenguajes específicos de la plataforma basados en el sistema operativo del servidor. Por ejemplo, un desarrollador que trabaja en una máquina NT podría crear un archivo por lotes que realiza las tareas de compilación y luego ejecuta la implementación. Sin embargo, si el entorno de producción tuviera Unix o Linux, el desarrollador tendría que volver a escribir el script, asegurándose de que estuvieran sincronizados.
OK, enséñame cómo funciona esto
Entonces, espero haberlo convencido de la necesidad de usar Ant y mostrar lo simple que es instalarlo. Ahora le mostraré lo simple que es usar Ant con un ejemplo que realiza una compilación e implementación simples.
Proceso de construcción simple con Ant (simple.xml)
Hay mucho que explicar en el ejemplo anterior. Primero, debe comprender la estructura del archivo simple.xml. Es un archivo XML bien formateado que contiene una entidad de proyecto que se compone de varias entidades de destino.
La primera línea contiene información sobre el proyecto general que se va a construir.
Los elementos más importantes de la línea del proyecto son el default
y el basedir
.
El default
atributo hace referencia al destino predeterminado que se va a ejecutar. Debido a que Ant es una herramienta de construcción de línea de comandos, es posible ejecutar solo un subconjunto de los pasos de destino en el archivo Ant. Por ejemplo, podría realizar el siguiente comando:
% ant -buildfile simple.xml init
Eso ejecutará el ant
comando y se ejecutará a través del archivo simple.xml hasta que init
se alcance el objetivo. Entonces, en este ejemplo, el valor predeterminado es deploy
. El proceso Ant invocado en la siguiente línea se ejecutará a través del simple.xml
archivo hasta que deploy
se alcance el comando:
% ant -buildfile simple.xml
El basedir
atributo se explica por sí mismo, ya que es el directorio base desde el que se recuperan las referencias relativas contenidas en el archivo de construcción. Cada proyecto puede tener solo un basedir
atributo, por lo que puede elegir incluir la ubicación del directorio completo o dividir el archivo de proyecto grande en archivos de proyecto más pequeños con diferentes basedir
atributos.
La siguiente línea de interés es la línea objetivo. Aquí se muestran dos versiones diferentes:
El target
elemento contiene cuatro atributos: name
, if
, unless
, y depends
. Ant requiere el name
atributo, pero los otros tres atributos son opcionales.
Con depends
, puede apilar las tareas de Ant para que una tarea dependiente no se inicie hasta que se complete la tarea de la que depende. En el ejemplo anterior, la tarea de limpieza no se iniciará hasta que se init
haya completado. El depends
atributo también puede contener una lista de valores separados por comas que indican varias tareas de las que depende la tarea en discusión.
El if
y unless
comandos le permiten especificar los comandos que se van a llevar a cabo, ya sea si una determinada propiedad se establece o menos que la propiedad se establece. Se if
ejecutará cuando se establezca el valor de la propiedad y unless
se ejecutará si no se establece el valor. Puede usar el available
comando para establecer esas propiedades como se muestra en el siguiente ejemplo, o puede establecerlas a través de la línea de comando.
El init
objetivo del ejemplo simple contiene cuatro líneas de property
comandos como se muestra aquí:
Estas property
líneas le permiten especificar directorios o archivos de uso común. Una propiedad es un par de nombre-valor simple que le permite hacer referencia al directorio o archivo como una entidad lógica en lugar de física.
Si quería hacer referencia a la sourceDir
variable de más adelante en el archivo Ant, simplemente puede utilizar la siguiente sintaxis para alerta Ant para obtener el valor de esta etiqueta: ${sourceDir}
.
Otros dos comandos presentes en el archivo de compilación anterior son:
Estos comandos se utilizan para garantizar que no haya archivos extraños en el outputDir
(o classes
directorio cuando se desreferencia como se mencionó anteriormente). El primer comando elimina todo el árbol contenido en outputDir
. El segundo comando crea el directorio nuevamente.
La última línea de mayor interés para el desarrollador es la siguiente línea de compilación:
El javac
comando requiere un directorio de origen (la ubicación de entrada de los archivos .java) y un directorio de destino (la ubicación de salida del archivo .classes). Es importante tener en cuenta que todos los directorios deben existir antes de la ejecución del ant
comando o crearse mediante el mkdir
comando. Ant no crea directorios basados en la intuición, por lo que debe crear el outputDir
, utilizando el mkdir
comando antes del paso de compilación anterior.
Una vez finalizada la compile
tarea, la deploy
tarea realizará la operación de copia para mover todos los archivos JSP del directorio de origen a un directorio de implementación. Al usar el copydir
comando, copia todo el directorio JSP de una ubicación a otra. Usé el copyfile
comando para copiar un solo archivo de propiedades como parte de la compilación.
Si bien se necesitaron varias líneas para explicar el ejemplo, debería ser evidente que Ant es una herramienta fácil de usar. Usando este archivo de compilación como punto de partida, debería poder incorporar Ant en su esfuerzo de desarrollo. Los ant
comandos que se muestran en el ejemplo anterior tienen más funciones, algunas de las cuales se discutirán en este artículo, el resto se le deja a usted junto con referencias a la documentación.
Tareas importantes
Le queda a usted leer las tareas integradas incluidas en la distribución Ant. Consulte la guía del usuario en Recursos para obtener información sobre cada comando. He elegido dos comandos de uso común como ejemplos de opciones adicionales disponibles para el administrador de compilación sin ninguna personalización.
Código de compilación (incluidos los EJB)
En el ejemplo simple discutido anteriormente, vio una forma simple del javac
comando. Ahora, si lo examina con más detalle, verá que puede especificar los indicadores de compilación, como obsolescencia, depuración u optimización, así como los archivos que se incluirán o no en la compilación.
Puede usar las include/exclude
entidades dentro de la javac
tarea para incluir / excluir archivos que coincidan con el patrón en el name
atributo de la compilación. En el ejemplo anterior, desea incluir archivos contenidos en cualquier directorio que termine en .java pero, al mismo tiempo, desea excluir archivos llamados Script.java a menos que una propiedad bsf.present
esté establecida en true.
La bsf.present
propiedad se establece mediante la siguiente tarea que busca en la ruta de clase el nombre de clase especificado y se establece de bsf.present
acuerdo con los resultados de la búsqueda:
El javac
comando no incluirá archivos llamados version.txt de la compilación basada en el comando de exclusión anterior.
Generando javadoc
Otra tarea que Ant puede ayudar a automatizar es la generación de javadoc. Puede utilizar el siguiente comando para generar el javadoc:
Los paquetes especifican los paquetes generales que incluirá el javadoc. El sourcepath
atributo apunta hacia la ubicación de los archivos de origen. El javadoc
comando también proporciona atributos que le permiten especificar el título de la ventana y el documento. También puede incluir un aviso de derechos de autor en la parte inferior de cada página javadoc, utilizando el bottom
atributo.
¿Puede Ant hacer XYZ?
En este punto, ha visto algunas de las posibles tareas en su proceso de compilación que Ant puede automatizar. Esas tareas se incluyen de fábrica en Ant. Es posible que desee personalizar Ant para ayudarlo a realizar algunas tareas más difíciles, como crear EJB y realizar la administración de la configuración remota. Algunos de ustedes pueden querer aumentar las capacidades de informes de Ant o construir una interfaz de usuario que pueda ejecutar el proceso Ant.
La respuesta simple a la pregunta "¿Puede Ant hacer XYZ?" es "Sí, pero es posible que deba personalizarlo".
Hormiga extensible
Es interesante discutir dos extensiones de Ant en este punto. Se trata de un aumento de los informes y la capacidad de distribuir código de forma remota utilizando Ant.