@@ -171,6 +171,134 @@ que no incluye dependencias. Para más información sobre ello y cómo incluirla
171171consulte este `gist sobre generación de paquetes
172172<https://gist.github.com/sio2sio2/efb81004024fd8329e2aef047f324c9c/> `_.
173173
174+ Arquetipos
175+ ==========
176+ Al crear un nuevo proyecto, *Maven * define su estructura inicial tomando como
177+ referencia lo que se llama un arquetipo (o ninguno). Como es probable que para
178+ resolver las tareas del módulo partamos siempre de una misma base, nos ahorrará
179+ mucho tiempo crear un arquetipo personal, así que pongámonos a ellos.
180+
181+ Lo primero es crear un arquetipo en un directorio:
182+
183+ .. code-block :: console
184+
185+ $ mvn archetype:generate \
186+ -DgroupId=edu.acceso.arquetipo \
187+ -DartifactId=acceso_datos
188+ -DarchetypeArtifactId=maven-archetype-archetype \ # Arquetipo base
189+ -DarchetypeVersion=1.5 \ # Versión del arquetipo base
190+ -Dversion=1.0 \ # Versión de este nuevo arquetipo.
191+ -DinteractiveMode=false
192+
193+ Esto definirá la estructura básica del arquetipo en el directorio
194+ :file: `acceso_datos `:
195+
196+ .. code-block :: none
197+
198+ +-- pom.xml (pom.xml del propio arquetipo)
199+ |
200+ +-- src/
201+ +-- main/resources/
202+ | +-- archetype-resources/
203+ | +-- pom.xml (pom.xml del proyecto)
204+ | +-- src/ ...
205+ | +-- META-INF/maven/
206+ | +-- archetype-metadata.xml
207+ +-- pom.xml
208+ +-- test/ ...
209+
210+ Como no nos interesan las pruebas podemos eliminar :file: `src/test/ ` y debemos
211+ centrarmos en:
212+
213+ #. El :file: `pom.xml ` del propio arquetipo.
214+ #. El contenido de :file: `src/main/resources/archetype-resources/ ` que contiene
215+ los archivos que contendrá nuestro proyecto.
216+ #. El archivo :file: `src/main/resources/META-INF/maven/archetype-metadata.xml `
217+ que contiene la configuración para generar el nuevo proyecto.
218+
219+ En consecuencia, todos los archivos que queramos que acaben en nuestro proyecto
220+ deberán incluirse dentro de la segunda ubicación; y en el tercer archivo
221+ deberemos definir la configuración:
222+
223+ .. literalinclude :: files/archetype-metadata.xml
224+ :language: xml
225+ :class: toggle
226+ :caption: archetype-metadata.xml
227+
228+ En la configuración tenemos dos partes fundamentales:
229+
230+ a. Por un lado declaramos los archivos que queremos que se incluyan en el
231+ proyecto. En la configuración hay tres bloques de archivos. La indicación
232+ *filtered * significa que queremos que el *plugin * analice el archivo en busca
233+ de propiedades para que las sustituya por su valor; y *packaged * que queremos
234+ que se añada la declaración de paquete: :code: `package
235+ edu.acceso.paquete...; ` al comienzo del archivo.
236+
237+ #. Por otro, definimos cuáles son las propiedades y los valores por defecto que
238+ tienen. Por ejemplo, la variable *artifactId * podrá referirse en los archivos
239+ como :code: `${artifactId} ` y, en ese caso, se sustituirá por el valor
240+ asignado.
241+
242+ .. warning :: Hay archivos como :file:`.gitignore` que el plugin no incluirá en
243+ el proyecto aunque lo creemos.
244+
245+ Pues bien, una vez creado el arquetipo deberíamos retocar su contenido para
246+ ajustarlo a nuestras necesidades.
247+
248+ .. note :: Se incluye :download:`un arquetipo preparado <files/arquetipo.zip>`
249+ que puede descargar, modificar a su gusto e instalar.
250+
251+ Una vez que tengamos preparado el arquetipo, debemos acceder a su directorio e
252+ instalarlo:
253+
254+ .. code-block :: console
255+
256+ $ cd acceso_datos/
257+ $ mvn clean install
258+
259+ .. tip :: Con ``clean`` nos aseguramos de que cualquier compilación anterior del
260+ arquetipo no interfiera.
261+
262+ Instalado, podemos comprobar que realmente lo está y registrarlo para que el
263+ |IDE | nos permita seleccionarlo:
264+
265+ .. code-block :: console
266+
267+ $ ls ~/.m2/repository/edu/acceso/arquetipo/acceso_datos/ # Si instalado, existirá.
268+ $ mvn archetype:crawl # Lo registramos.
269+ $ cat ~/.m2/repository/archetype-catalog.xml # Comprobamos el registro.
270+
271+ En caso de que quisiéramos eliminarlo podríamo eliminar a mano:
272+
273+ .. code-block :: console
274+
275+ $ rm -rf ~/.m2/repository/edu/acceso/arquetipo/acceso_datos/
276+ $ mvn archetype:crawl
277+
278+ En principio, podríamos probar a generar un nuevo proyecto sin llegar a usar el
279+ |IDE |:
280+
281+ .. code-block :: console
282+
283+ $ mvn archetype:generate \
284+ -DarchetypeGroupId=edu.acceso.arquetipo \
285+ -DarchetypeArtifactId=acceso_datos \
286+ -DarchetypeVersion=1.0 \ # Versión de arquetipo (en su pom.xml)
287+ -DgroupId=edu.acceso.test_test \
288+ -DartifactId=test_test \
289+ -DinteractiveMode=false
290+
291+ .. caution :: Téngase presente que hay dos números de versión: la versión del
292+ propio arquetipo que es la que se indica aquí y que se define en el archivo
293+ :file: `pom.xml ` del propio arquetipo (el que se encuentra en el directorio
294+ raíz, :file: `acceso_datos ` en nuestro ejemplo) y la versión de la aplicación
295+ que pretendemos desarrollar, que se puede proporcionar mediante
296+ :code: `-Dversion= `, pero que no hemos fijado y hemos preferido indicar en el
297+ archivo `archetype-metadata.xml ` a través de la propiedad correspondiente.
298+
299+ También podremos crear el proyecto a través del |IDE | siempre que nos hayamos
300+ asegurado de que el arquetipo se registró.
301+
174302.. rubric :: Notas al pie
175303
176304.. [# ] El *bytecode * es retrocompatible, es decir, el *bytecode * generado para
0 commit comments