> For the complete documentation index, see [llms.txt](https://educacion.gitbook.io/programacion/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://educacion.gitbook.io/programacion/ud8-persistencia-en-bases-de-datos/anexo-maven.md).

# Anexo: Maven

<figure><img src="/files/VncF2iG87j1Ucm11V2DH" alt=""><figcaption></figcaption></figure>

**Apache Maven** é unha ferramenta de **xestión de proxectos e automatización de construción** (*build tool*). O seu obxectivo principal é estandarizar a forma en que se crea un proxecto, facilitando a vida aos desenvolvedores ao automatizar tarefas repetitivas.

### O obxecto POM (pom.xml)

O ficheiro chamado Project Object Model (POM) é o elemento central de un proxecto tipo maven. É un ficheiro XML que contén todas os elementos co que vai a traballar o proxecto, entre as que destacamos:

* Nome e versión do proxecto
* Dependencias (bibliotecas externas)
* Configuración de plugins para compilar ou empaquetar o código

### Xestión de dependencias

A xestión de dependencias é unha das principais vantaxes do uso de Maven. En lugar de descargar manualmente ficheiros `.jar` (como o driver de MariaDB) e incluilo no proxecto, simplemente se indica no pom.xml os datos da biblioteca necesaria. A partir de aqui:

* **Maven busca o driver/framework na nube e xestiona a descarga e instalación**
* **Maven xestiona dependencias transitivas:** Se a biblioteca A necesita a biblioteca B, Maven baixa e instala ambas automaticamente.

### Ciclo de Vida&#x20;

Maven implementa comandos de execución para as diferentes fases do ciclo de vida:

* `compile`: Compila o código fonte.
* `test`: Executa as probas unitarias.
* `package`: Empaqueta o código nun ficheiro distribuíble (como un `.jar` ou `.war`).
* `install`: Garda o paquete no teu repositorio local para usalo noutros proxectos.

## Maven en IntelliJ

No momento de crear un proxecto con IntellIJ, se queremos traballar con Maven debemos de escoller a opción correspondente no configurador:

<figure><img src="/files/iPOca7AC0iWKt2UqKDhX" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
Instala a **versión 21 de Java para traballar con Docker** evitando problemas de compatibilidade
{% endhint %}

Unha vez creado o noso proxecto, vai a contar coa seguinte estructura de directorios, similar a que estamos acostumados:

* A **carpeta src** será a que conteña os ficheiros fonte da nosa aplicación:
  * **src/main/java** será a carpeta que crearemos para almacenar os nosos ficheiros  .java co código. Esta carpeta deberá de estar subdivida adecuadamente en paquetes de ser necesario (Modelo, DAO, Servicio, Controlador, Vista, Util,...)
  * **src/main/resources** será a carpeta na que almacenaremos outros recursos que empreguemos no proxecto. Nestra carpeta poderianse incluir un ou varios ficheiros de configuración da aplicación (config.properties)
  * **src/main/webapp** será a carpeta na que se incluan os HTML da vista
  * **src/test/java** será o directorio no que se almacenarar os test unitarios que se desenvolvan (Por exemplo con JUnit)

{% hint style="warning" %}
Podes consultar mais información no enlace de Standard Directory Layout de Maven:
{% endhint %}

{% embed url="<https://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html>" %}

* O **pom.xml** vaise situar no nivel principal do proxecto, para facilitar o seu acceso.

<figure><img src="/files/c9oUOe7oyNH71oN03muc" alt=""><figcaption></figcaption></figure>

### Engadir dependencias no pom.xml

Para engadir dependencias no pom.xml, habrea que completar o ficheiro engadindo o elemento \<dependencies> e os seus subelementos \<dependency>. Podense engadir tantos elementos \<dependency> como se estime oportuno. No noso caso engadimos a dependencia de MariaDB

```xml
    <dependencies>
        <dependency>
            <groupId>org.mariadb.jdbc</groupId>
            <artifactId>mariadb-java-client</artifactId>
            <version>3.3.3</version>
        </dependency>
    </dependencies>
```

<figure><img src="/files/fl4OT9yBcDWQAG9yIITO" alt=""><figcaption></figcaption></figure>

Unha vez engadida, sincronizaremos o repositorio para que descargue e instale a dependencia concreta pulsando no incono que aparece na parte superior dereita: ![](/files/6MUvQTcKHgELzowYG4VZ)

Unha vez pulsado e finalizada a instalación , podemos comprobar na parte esquerda do IDE, que dentro de External Libraries efectivamente está instalado o componente:

<figure><img src="/files/tpTlUBGQiwwnAcI2oIo2" alt=""><figcaption></figcaption></figure>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://educacion.gitbook.io/programacion/ud8-persistencia-en-bases-de-datos/anexo-maven.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
