Ya les conté someramente qué es NAnt, ahora…¿qué es AjGenesis?…AjGenesis es un generador de artefactos de texto de código abierto. Para más información dirigirse a http://www.ajlopez.com/ajgenesis
Puede bajarse el generador, desde AjGenesis-0.5, ejemplos desde AjGenesisExamples.zip, más ejemplos en AjGenesisExamples3.zip, documentación en http://www.ajlopez.net/ajgenesis/documentation.php
AjGenesis se basa en un modelo soportado en XML y plantillas.Para utilizar este generador sólo hay que descargarlo y descomprimirlo en una carpeta.
AjGenesis funciona con el Framework 1.1 en adelante, nosotros vamos a necesitar la versión 2.0 que es el que corresponde a Visual Studio 2005. Tambien hay que tener instalado NAnt 0.85La idea es, mediante NAnt, ejecutar Tareas de AjGenesis en un orden que puede definirse. En algunos casos serán comandos NAnt (por ejemplo, crear o eliminar carpetas, archivos, etc.) y en otros archivos de lotes .ajg donde se define, por medio de los templates, que hacer con el modelo (los archivos XML), en sintaxis AjBasic, por ejemplo:
TransformerManager.Transform(«Templates/VbNet2/EntityVb.tpl»,»${Project.BuildDir}/Src/${Project.Name}.Entities/${Entity.Name}.vb»,Environment)
En esta linea se está aplicando la plantilla EntityVb.tpl a la entidad que se soportará en un archivo cuya ubicación y nombre resulte de
${Project.BuildDir}/Src/${Project.Name}.Entities/${Entity.Name}.vb
dónde;
${Project.BuildDir} es la carpeta en la que se guarda el código autogenerado, se define en NAnt, en el archivo .build,
${Project.Name} se define en el archivo Project.xml, es el archivo raiz del modelo de datos y
${Entity.Name} se define en el archivo XML del mismo nombre, descriptor de la entidad.
Una vez copiados NAnt y AjGenesis como se describe anteriormente, para asegurarse que todo funciona correctamente es conveniente ejecutar un ejemplo de los que Ángel Lopez nos deja.
Obviamente ejecutaremos alguna variante de Hello World
Para verificar la instalación de NAnt abramos una ventana de línea de comandos y tipeamos NAnt y Enter, como no va a encontrar ningún archivo .build mostrará lo siguiente:
NAnt 0.85 (Build 0.85.2478.0; release; 14/10/2006)
Copyright (C) 2001-2006 Gerry Shaw
BUILD FAILED
Could not find a ‘*.build’ file in ‘C:\…….’
For more information regarding the cause of the build failure, run the build again in debug mode.
Try ‘nant -help’ for more information
Ahora verifiquemos que funcione AjGenesis.
Supongamos que ya bajamos el archivo AjGenesis-0.5.zip, lo descomprimimos y lo copiamos en C:\Lab\AjLopez\AjGenesis-0.5, también descomprimimos los archivos AjGenesisExamples.zip y AjGenesisExamples3.zip dentro de C:\Lab\AjLopez\AjGenesis-0.5\examples, los nombres de las carpetas que doy son arbitrarios, si los querés modificar sólo tendrías que tener en cuenta de modificar los valores en el archivo .build de NAnt, en las tareas .ajg y en los templates .tpl
Busquemos el ejemplo HelloWorldNAnt, en su carpeta encontraremos un archivo de nombre default.build, este es el archivo NAnt con el siguiente contenido:
<?xml version=»1.0″?><project name=»Example 1″ default=»build»>
<property name=»src.dir» value=».»/>
<property name=»build.dir» value=»${src.dir}/Build»/>
<property name=»templates.dir» value=»${src.dir}/Templates»/>
<property name=»models.dir» value=»${src.dir}/Models»/>
<property name=»tasks.dir» value=»${src.dir}/Tasks»/>
<property name=»ajgenesis.dir» value=»${src.dir}/../..»/>
<property name=»nanttasks.dir» value=»${ajgenesis.dir}/bin»/>
<target name=»clean» description=»cleans build directory»>
<delete dir=»${build.dir}» verbose=»true» if=»${directory::exists(build.dir)}» />
</target>
<target name=»loadtasks» description=»loads AjGenesis tasks»>
<loadtasks assembly=»${nanttasks.dir}/AjGenesis.NAnt.dll» />
</target>
<target name=»init» depends=»loadtasks» description=»init the AjGenesis model, create build directory»>
<mkdir dir=»${build.dir}»/>
<loadmodel model=»${models.dir}/Project.xml»/>
</target>
<target name=»build» depends=»init»>
<executetask task=»${tasks.dir}/Build.ajg»/>
</target>
</project>
Vemos un archivo XML, en los primeros tags se definen variables que contienen la rutas de algunas carpetas que se irán utilizando más adelante:
src.dir es la carpeta raiz,
build.dir es dónde se aloja el código autogenerado,
templates.dir es dónde el generador encuentra sus plantillas,
models.dir contiene los archivos XML que definen el modelo,
tasks.dir acá encontramos los archivos .ajg que definen las tareas,
ajgenesis.dir es la carpeta dónde se encuentra el generador de código, revisar bien esta definición,
nanttask.dir contiene las dll’s de AjGenesis que trabajan con NAnt.
A continuación hay cuatro nodos target, cada uno representa una tarea en NAnt, básicamente tiene un atributo name, con el nombre, que es obligatorio, description es opcional y depends, que lo encontramos en el último tag target, indica que esta tarea no se ejecutará hasta que se finalice init.
Volvamos a la ventana de linea de comandos que ya teníamos abierta, ubiquémonos en la carpeta que contiene el archivo default.build del ejemplo HelloWorldNAnt, una vez posicionados en esta carpeta tipeamos NAnt y Enter, si todo anda bien, veremos lo siguiente:
C:\Lab\AjLopez\AjGenesis-0.5\examples\HelloWorldNAnt>NAnt
NAnt 0.85 (Build 0.85.2478.0; release; 14/10/2006)
Copyright (C) 2001-2006 Gerry Shaw
Buildfile: C:/Lab/AjLopez/AjGenesis-0.5/examples/HelloWorldNAnt/default.build
Target framework: Microsoft .NET Framework 2.0
Target(s) specified: build
loadtasks:
[loadtasks] Scanning assembly «AjGenesis.NAnt» for extensions.
init:
build:
Generating Solution HelloWorld
Creating Directories
Creating Solution File
Creating VB.Net Project
Creating C# Project
BUILD SUCCEEDED
Total time: 0.4 seconds.
Al ejecutar NAnt, este busca en la misma carpeta un archivo con extensión build, si lo encuentra lo ejecuta, si no, da el error que vimos anteriormente.Si vamos a ver en la carpeta C:\Lab\AjLopez\AjGenesis-0.5\examples\HelloWorldNAnt\Build veremos que hay una carpeta de nombre HelloWorld que contiene la solución y dos carpetas que contienen sendos proyectos uno en C# y otro en VB.
Si funcionó, a festejar, sino escribime y vemos cómo te puedo ayudar. 🙂
6 comentarios
Comments feed for this article
domingo 18 \18-03:00 noviembre \18-03:00 2007 a 20:11:55
Usando AjGenesis y NAnt - Angel "Java" Lopez
[…] Cómo generar código con AjGenesis sirviéndonos de NAnt […]
jueves 03 \03-03:00 abril \03-03:00 2008 a 4:04:06
Code Generation as a Service - Angel "Java" Lopez
[…] Cómo generar código con AjGenesis sirviéndonos de NAntCómo generar código con AjGenesis sirviéndonos de NAnt – Parte II […]
sábado 19 \19-03:00 abril \19-03:00 2008 a 7:04:57
Code Generation as a Service with AjGenesis « Angel “Java” Lopez on Blog
[…] Cómo generar código con AjGenesis sirviéndonos de NAntCómo generar código con AjGenesis sirviéndonos de NAnt – Parte II […]
miércoles 14 \14-03:00 May \14-03:00 2008 a 12:05:31
José Franco
[…]
sábado 05 \05-03:00 marzo \05-03:00 2011 a 16:03:18
Rocket French
I have been exploring for a little for any high-quality articles or blog posts on this sort of area . Exploring in Yahoo I at last stumbled upon this website. Reading this information So i’m happy to convey that I have an incredibly good uncanny feeling I discovered exactly what I needed. I most certainly will make sure to do not forget this site and give it a look regularly.
martes 31 \31-03:00 May \31-03:00 2011 a 19:05:25
spotingbet
carlossantos.wordpress.com is very cool !
sportingbet australia