Mi regla normal es no usar <ant>
o <subant>
en un proceso de compilación normal porque rompe la comprobación de dependencia. Tuvimos un desarrollador dividir un build.xml en siete archivos de compilación separados, y debido a la constante llamada de <ant>
tareas para hacer cosas en otros archivos de compilación, estaba ejecutando el mismo objetivo hasta 14 veces. Y, entonces, se preguntó por qué su construcción tardaba tanto. Al unir los siete archivos de compilación en un solo build.xml
y al usar el parámetro depends
de <target>
, se acorta la construcción en menos de dos minutos.
Sin embargo, lo que tiene en este caso son realmente dos proyectos separados y uno build.xml
que está utilizando para llamar a esos dos proyectos por separado. En este caso, es mejor utilizar las llamadas <ant>
y <subant>
que <import>
.
- Estas llamadas no interferirán con
${basedir}
.
- Estas llamadas le permiten especificar qué propiedades y recursos desea incluir en estos archivos separados. (La respuesta probable es ninguna).
- No tiene problemas con varios destinos que comparten el mismo nombre. Un compilar objetivo en su compilación de cliente no se superpondrá al objetivo
_compile_
en la compilación de su servidor.
Subant es más potente, pero más complicado de implementar. Con Subant, puede hacer que busque los archivos build.xml. La mayor parte del tiempo usando <ant>
es simplemente más fácil y hace lo que quiere.
Lo que realmente recomendaría es usar Ivy para manejar los problemas de dependencia. Ivy no solo puede manejar la dependencia del servidor en su cliente, sino que también puede manejar todas las dependencias jar de terceros. No más almacenamiento de jarfiles en tus proyectos. Cuando almacena archivos jar en un proyecto, pierde información sobre su versión actual y su historial. Usted ve un commons-io.jar
en su proyecto, y no tiene idea de qué versión era o incluso si es el common common-io.jar, o uno de sus desarrolladores lo escribió como un punto.
El problema es que Ivy requiere un poco de trabajo para implementar. Debe usar un administrador de repositorio de Ivy como Nexus, Artifactory o Archiva. (En realidad, estos son los administradores de repositorios de Maven, pero Ivy funciona muy bien con ellos.)
Luego, debe importar ivy.jar
en su proyecto y obtener el archivo ivysettings.xml
para apuntar a su servidor de repositorio Ivy
Maven
.
Si utiliza Subversion como su sistema de control de versiones, puede hacer lo siguiente:
- crear un proyecto que incluye la hiedra ivy.jar, y un archivo XML que establece todo para usted. Tengo uno en Github que puedes ver. El archivo XML se llama
ivy.tasks.xml
.
- Luego en su proyecto, use
svn:externals
para importar este proyecto.
- En su
build.xml
, que tiene que hacer dos cosas:
- añadir el espacio de nombres de la hiedra en su entidad
<project>
.
- Utilice la tarea
<import>
para importar el archivo Ivy XML que tiene todo configurado.
La ventaja es que el cambio de su proyecto Ivy cambiará automáticamente todos los proyectos que interactúan con la hiedra. Por ejemplo, si cambia la URL del servidor de Ivy, o necesita redefinir los directorios de caché de Ivy.
Uno se hace eso, se crea un archivo sencillo ivy.xml
que define sus dependencias, y utilizar <ivy:cachepath>
y <ivy:retrieve>
para recuperar los frascos de terceros que necesita. Esto incluiría el contenedor de servidor que su cliente necesita.