# 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:

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

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

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


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

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

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

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:

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:

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:

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

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:
