1. Asistentes inteligentes (Maven, Gradle)
    1. Maven
      1. Estructura de un proyecto Maven
      2. Estructura del pom.xml
    2. Gradle
      1. Estructura de un proyecto Gradle
  2. Creación de una aplicación Maven con Hibernate, Java y Struts 2
  3. Preparamos la aplicación Java para su ejecución en Heroku
  4. Configuración del proyecto contra un repositorio de GIT
  5. Lanzar el proyecto

Asistentes inteligentes (Maven, Gradle)

  • Descargan de las librerías de terceros.
  • Crean automáticamente los ejecutables, JAR, WAR, etc.

Maven

  • Es un proyecto de Apache
  • Tiene un fichero de configuración, pom.xml que se encarga de:
    • Describir el proyecto a construir
    • Las dependencias
    • Compilación de código
    • Empaquetado

Estructura de un proyecto Maven:

  • src
    • main
      • java (aquí ponemos nuestras clases Java). Para crear esta carpeta en eclipse:
        1. Botón derecho sobre el proyecto -> new -> source folder -> src/main/java
        2. Botón derecho sobre el folder recién creado -> new -> package
      • resources (hibernate.cfg.xml, struts.xml, etc...)
      • webapp (aquí van los HTML, CSS y JS)
    • test
      • java (aquí podemos dejar nuestras pruebas unitarias)
    • target (aquí se almacena el proyecto empaquetado)
    • pom.xml (este es el fichero de configuración de Maven)

Estructura del pom.xml

  • groupId: package del proyecto
  • artifactId: nombre del proyecto
  • version
  • dependencies: librerías externas. Si alguna de las dependencias aquí indicadas es incorrecta, tendremos un error 404 al iniciar la aplicación. Deberíamos ir eliminando las dependencias una a una para ver cual genera el error.

En mvnrepository.com puedes buscar las dependencias que usará tu proyecto.

Gradle

La connfiguración está escrita en JSON

Estructura de un proyecto Gradle:

  • src
    • main
      • java
      • resources
    • test
      • java
      • resources
  • build
  • build.gradle

Creación de una aplicación Maven con Hibernate, Java y Struts 2

  1. Creamos un nuevo proyecto maven.
    • mvn -B archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=com.pablomonteserin -DartifactId=nombreAplicacion
    • Por otra parte, Eclipse tiene integrada de crear un nuevo proyecto Maven. Para usar Gradle, sin embargo, habría que instalarle un plugin.

      Para crear un nuevo proyecto con Maven en Eclipse, usaremos new -> Maven Project ->

      • maven-archetype-quickstart (para un proyecto JSE)
      • maven-archetype-web-app (para un proyecto JEE)
  2. Modificamos el pom.xml (project object model) de este proyecto poniendo el siguiente código, válido para un proyecto con Hibernate y Struts 2
    <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/maven-v4_0_0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    	<groupId>com.pablomonteserin</groupId>
    	<artifactId>futbol2</artifactId>
    	<packaging>war</packaging>
    	<version>0.0.1-SNAPSHOT</version>
    	<name>futbol2 Maven Webapp</name>
    	<url>http://maven.apache.org</url>
    	<dependencies>
    		<dependency>
    			<groupId>junit</groupId>
    			<artifactId>junit</artifactId>
    			<version>3.8.1</version>
    			<scope>test</scope>
    		</dependency>
    		<dependency>
    			<groupId>javax.servlet</groupId>
    			<artifactId>servlet-api</artifactId>
    			<version>2.4</version>
    			<scope>provided</scope>
    		</dependency>
    		<dependency>
    			<groupId>javax.servlet</groupId>
    			<artifactId>jsp-api</artifactId>
    			<version>2.0</version>
    			<scope>provided</scope>
    		</dependency>
    		<dependency>
    			<groupId>org.hibernate</groupId>
    			<artifactId>hibernate-core</artifactId>
    			<version>5.3.0.Final</version>
    		</dependency>
    		<dependency>
    			<groupId>org.apache.struts</groupId>
    			<artifactId>struts2-core</artifactId>
    			<version>2.5.16</version>
    		</dependency>
    		<dependency>
    			<groupId>mysql</groupId>
    			<artifactId>mysql-connector-java</artifactId>
    			<version>6.0.4</version>
    		</dependency>
    		<dependency>
        		<groupId>javax.xml.bind</groupId>
    			<artifactId>jaxb-api</artifactId>
    			<version>2.2.11</version>
    		</dependency>
    		<dependency>
    			<groupId>com.sun.xml.bind</groupId>
    			<artifactId>jaxb-core</artifactId>
    			<version>2.2.11</version>
    		</dependency>
    		<dependency>
    			<groupId>com.sun.xml.bind</groupId>
    			<artifactId>jaxb-impl</artifactId>
    			<version>2.2.11</version>
    		</dependency>
    		<dependency>
    			<groupId>javax.activation</groupId>
    			<artifactId>activation</artifactId>
    			<version>1.1.1</version>
    		</dependency>
    	</dependencies>
    	<build>
    		<finalName>futbol2</finalName>
    	</build>
    </project>

Preparamos la aplicación Java para su ejecución en Heroku

Descargar ejemplo
  1. Para poder ejecutar aplicaciones de Java en Heroku, habrá que vincularles el plugin webapp runner (https://devcenter.heroku.com/articles/java-webapp-runner)

    pom.xml<build>
        ...
        <plugins>
            ...
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>3.0.2</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals><goal>copy</goal></goals>
                        <configuration>
                            <artifactItems>
                                <artifactItem>
                                    <groupId>com.github.jsimone</groupId>
                                    <artifactId>webapp-runner</artifactId>
                                    <version>8.5.31.0</version>
                                    <destFileName>webapp-runner.jar</destFileName>
                                </artifactItem>
                            </artifactItems>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    La versión del webapp runner está vinculada a la versión de Apache Tomcat; es decir, la versión 8.5.23.0 de webapp runner usa la versión 8.5.23.0 de Apache Tomcat.

  2. Debemos asignar dynos a nuestro proyecto, para ello creamos un fichero Procfile en la raíz de nuestro proyecto con el siguiente código
    Procfileweb: java $JAVA_OPTS -jar target/dependency/webapp-runner.jar --port $PORT target/*.war
  3. Tienes la guía en este enlace: https://devcenter.heroku.com/articles/getting-started-with-java#introduction. Seguiremos los pasos indicados hasta completar la instalación de Heroku CLI y ejecutar con exito "heroku login"
  4. Después de esto, el asistente nos propone crear una nueva alicación de Heroku, pero lo que debemos hacer es crear una propia, no una de Heroku. Por tanto, entramos en el dashboard de Heroku. Dashboard -> new -> create new app
  5. En Deployment method escogeremos Heroku GIT.
  6. Ejecutaremos los pasos pasos que nos indica la consola: ...
    Subir cambiosgit add .
    git commit -am "make it better"
    git push heroku master
  7. Tras hacer el push se nos indica en la consola la url donde se ejecutará la app. Ejemplo: https://app-futbol.herokuapp.com/
  8. Si al ejecutar la aplicación hay algún error, podemos verlo en los logs : Dashborard -> More -> View Logs.

Creación de la basae de datos en Heroku

  1. Menú hamburguesa -> Elements
  2. Selecciono ClearDB MySQL
  3. Install ClearDB MySQL
  4. Selecciono el proyecto al que quiero añadir la base de datos
  5. Pulsamos sobre Provision add-on (necesitaremos tener configurada una tarjeta bancaria)
  6. Ejecutando el la carpeta de nuestro proyecto el comando
    heroku config
    Podremos ver los datos de conexión a la base de datos. Por ejemplo, para esta url:
    mysql://be45deb9852070:798cb3e2@eu-cdbr-west-02.cleardb.net/heroku_83c786ff2b6e84d?reconnect=true
    

    Usuario: be45deb9852070
    Pass: 798cb3e2
    host: eu-cdbr-west-02.cleardb.net
    Nombre Base de datos: heroku_83c786ff2b6e84d

Configuración del proyecto Heroku contra un repositorio de GIT

  1. heroku git:remote -a nombre-app-en-heroku
  2. git push heroku master

Lanzar el proyecto

heroku open
icono de mandar un mail¡Contacta conmigo!
contacta conmigoPablo Monteserín

¡Hola! ¿En qué puedo ayudarte?