---
# System prepended metadata

title: Creació de projecte MAVEN i aplicació al client IoT
tags: ['#M13 PROJECTE']

---

# Creació de projecte MAVEN i aplicació al client IoT

Per tal d'entendre que necessitem a l'hora d'implementar el client IoT que s'ha de connectar a l'AWS en mode subscriptor us expliquem tot seguit els passos per crear el projecte.

### Creació del projecte amb MAVEN

MAVEN és un gestor de dependències el qual ens serà d'utilitat per incorporar aquelles utilitats i peces de software necessàries per tal que el nostre programa client funcioni. D'aquesta forma ens estalviarem haver de baixar i instal·lar res (fins que compilem el projecte i generem l'executable .jar).

Mostrarem tot seguit com fer-ho amb visual Studio Code. Assumirem que teniu instal·lat l'**Extension pack for java**, en cas contrari instal·leu-lo:

![imatge](https://hackmd.io/_uploads/rkq2IK3myx.png)

El primer pas es fer CTRL + SHIFT + P i escriure que volem un nou projecte maven:

![imatge](https://hackmd.io/_uploads/rk0hsi0kyx.png)

A continuació li diem que no volem cap arquetip de projecte, ja que no ens farà falta:

![imatge](https://hackmd.io/_uploads/S1Sz2o0y1g.png)

I anem omplint el que ens va demanant d'aquesta forma (groupid, artifactid, ):

![imatge](https://hackmd.io/_uploads/H1ovPYnQ1x.png)


![imatge](https://hackmd.io/_uploads/Hkn6vtn71e.png)


Ens demanarà desar-ho en una carpeta del local. Trieu la que considereu (en aquest exemple triem Documents):

![imatge](https://hackmd.io/_uploads/rynZaoCkJl.png)

Un cop l'obriu haurieu de localitzar la carpeta. Si la desplegueu, veureu que hi ha un arxiu anomenat pom.xml:

![imatge](https://hackmd.io/_uploads/B1Nq_Y3mke.png)


L'obrim i l'editem per tal d'afegir aquí una dependència. Ens el trobarem així:

![imatge](https://hackmd.io/_uploads/S1QA_YnQJx.png)


i l'haurem de deixar així, incorporant les següents dependències:

* Dependència de l'AWS per poder connectar-se en mode subscriptor.
* Dependència del MariaDB per poder connectar-se a la base de dades i insertar la informació que ens arriba de l'AWS. Si esteu utilitzant un altre SGDB com el postgreSQL cerqueu la dependència al repository [Maven Central](https://mvnrepository.com)

```
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>cat.iticbcn</groupId>
    <artifactId>clientIoT</artifactId>
    <version>1.1</version>
    <packaging>jar</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <exec.mainClass>cat.iticbcn.clientiot.ClientIoT</exec.mainClass>
    </properties>
    <dependencies>
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-iot-device-sdk-java-samples</artifactId>
            <version>1.3.9</version>
        </dependency>

        <dependency>
            <groupId>org.mariadb.jdbc</groupId>
            <artifactId>mariadb-java-client</artifactId>
            <version>3.5.1</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <mainClass>cat.iticbcn.clientiot.ClientIoT</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
            <plugin> 
                <groupId>org.apache.maven.plugins</groupId> 
                <artifactId>maven-shade-plugin</artifactId> 
                <version>3.2.4</version> 
                <executions> 
                    <execution> 
                        <phase>package</phase> 
                        <goals> 
                            <goal>shade</goal> 
                        </goals> 
                    </execution> 
                </executions> 
            </plugin>             
        </plugins>
    </build>
</project>
```

Tingueu present que per obtenir la darrera versió d'aquestes dependències podeu accedir al: [Maven Central](https://mvnrepository.com) i cercar-la.

Desem el contingut i al fer-ho a la cantonada inferior dreta ens apareixerà aquest missatge:

![imatge](https://hackmd.io/_uploads/Hy_Ky2C1Jg.png)

Diem que yes per tal que es considerin els canvis deguts a la dependència afegida.

A partir d'aquí, podeu bé utilitzar la classe Main.java que ve per defecte o bé reemplaçar aquesta classe per una altra que tingui el `public static void main(String[] args)` on s'implementarà la crida a les classes necessàries per poder fer córrer el programa.

### Compilació i cicle de vida

A la part de sota veureu que hi ha un apartat anomenat MAVEN on teniu les opcions de cicle de vida del projecte, com pot ser compilar-lo i obtenir l'executable:

![imatge](https://hackmd.io/_uploads/ryZxat37ye.png)

Si ens posem a sobre de les opcions, veurem que apareix un botó de play, el qual si el pitgem executarà l'opció en qüestió sobre el nostre projecte:

![imatge](https://hackmd.io/_uploads/rkASRF2m1e.png)

L'opció compile ens compila, descarrega les dependències i ens verifica que tot ha anat bé:

![imatge](https://hackmd.io/_uploads/Hk7xEchQJe.png)


Amb l'opció install es fa el build del .jar, que és l'executable de la nostra aplicació, el qual podrem veure dins la carpeta target del nostre projecte:

![imatge](https://hackmd.io/_uploads/SJ_qX53Xke.png)


