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