Skip to content

Commit 8c4dbc8

Browse files
committed
Definir arquetipos en Maven
1 parent 32f5cfb commit 8c4dbc8

File tree

3 files changed

+170
-0
lines changed

3 files changed

+170
-0
lines changed

source/98.apendices/80.maven.rst

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,134 @@ que no incluye dependencias. Para más información sobre ello y cómo incluirla
171171
consulte 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
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<archetype-descriptor name="acceso-datos"
3+
xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.1.0"
4+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5+
xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.1.0 http://maven.apache.org/xsd/archetype-descriptor-1.1.0.xsd">
6+
7+
<fileSets>
8+
<fileSet filtered="true" packaged="false">
9+
<directory></directory>
10+
<includes>
11+
<include>README.md</include>
12+
<include>LICENSE</include>
13+
</includes>
14+
</fileSet>
15+
<fileSet filtered="true" packaged="false">
16+
<directory>.vscode</directory>
17+
<includes>
18+
<include>**/*.json</include>
19+
</includes>
20+
</fileSet>
21+
<fileSet filtered="true" packaged="true">
22+
<directory>src/main/java</directory>
23+
<includes>
24+
<include>**/*.java</include>
25+
</includes>
26+
</fileSet>
27+
</fileSets>
28+
29+
<requiredProperties>
30+
<requiredProperty key="groupId" />
31+
<requiredProperty key="artifactId" />
32+
<requiredProperty key="version">
33+
<defaultValue>1.0.0</defaultValue>
34+
</requiredProperty>
35+
<requiredProperty key="dollar">
36+
<defaultValue>$</defaultValue>
37+
</requiredProperty>
38+
<requiredProperty key="hash">
39+
<defaultValue>#</defaultValue>
40+
</requiredProperty>
41+
</requiredProperties>
42+
</archetype-descriptor>
7.12 KB
Binary file not shown.

0 commit comments

Comments
 (0)