<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>maven Archives - Software Evolutivo</title>
	<atom:link href="https://softwareevolutivo.com.ec/tag/maven/feed/" rel="self" type="application/rss+xml" />
	<link>https://softwareevolutivo.com.ec/tag/maven/</link>
	<description>Consultora de Software Empresarial</description>
	<lastBuildDate>Thu, 14 Jul 2022 02:17:44 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://softwareevolutivo.com.ec/wp-content/uploads/2024/03/cropped-Perfil-Redes-Iso-32x32.png</url>
	<title>maven Archives - Software Evolutivo</title>
	<link>https://softwareevolutivo.com.ec/tag/maven/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>[:es]Desarrollo de aplicaciones Web con Spring Boot[:]</title>
		<link>https://softwareevolutivo.com.ec/espanol-desarrollo-de-aplicaciones-web-con-spring-boot/</link>
					<comments>https://softwareevolutivo.com.ec/espanol-desarrollo-de-aplicaciones-web-con-spring-boot/#respond</comments>
		
		<dc:creator><![CDATA[Jorge Aguilar]]></dc:creator>
		<pubDate>Mon, 14 Aug 2017 13:57:44 +0000</pubDate>
				<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[springboot]]></category>
		<guid isPermaLink="false">https://softwareevolutivo.com.ec/?p=201</guid>

					<description><![CDATA[<p>Según el sitio oficial del proyecto, se puede definir Spring Boot de la siguiente manera: «Es una solución para crear aplicaciones basadas en Spring de una manera rápida, autónoma y con características deseables para producción». Al momento, resulta de mucho interés contar con herramientas que apoyen al desarrollo rápido de aplicaciones. Y ésta es la</p>
<p>The post <a href="https://softwareevolutivo.com.ec/espanol-desarrollo-de-aplicaciones-web-con-spring-boot/">[:es]Desarrollo de aplicaciones Web con Spring Boot[:]</a> appeared first on <a href="https://softwareevolutivo.com.ec">Software Evolutivo</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="201" class="elementor elementor-201">
						<section class="elementor-section elementor-top-section elementor-element elementor-element-522bf39f elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="522bf39f" data-element_type="section" data-e-type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-1913959f" data-id="1913959f" data-element_type="column" data-e-type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-1df6ecf7 elementor-widget elementor-widget-text-editor" data-id="1df6ecf7" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>[:es]<img fetchpriority="high" decoding="async" class="size-medium aligncenter" src="http://assets.spring.io/wp/wp-content/uploads/2013/08/spring.png" width="379" height="369">Según el sitio oficial del proyecto, se puede definir <a href="https://projects.spring.io/spring-boot/" target="_blank" rel="noopener noreferrer">Spring Boot</a> de la siguiente manera: &#8220;Es una solución para crear aplicaciones basadas en Spring de una manera rápida, autónoma y con características deseables para producción&#8221;.</p>
<p>Al momento, resulta de mucho interés contar con herramientas que apoyen al desarrollo rápido de aplicaciones. Y ésta es la motivación principal para presentar esta primera entrada sobre el tema.</p>
<p>Entre las principales características de Spring Boot se encuentran:</p>
<ul>
<li>Contenedores Java embebidos: Tomcat o Jetty</li>
<li>Soporte para la automatización con Maven y Gradle</li>
<li>Configuración sugerida para iniciar rápidamente con un proyecto (Starters)</li>
<li>Configura automáticamente Spring, cuando sea posible</li>
<li>Características listas para producción: métricas, seguridad, verificación del estatus, externalización de configuración, etc.</li>
<li>No genera código y no requiere configuración XML</li>
</ul>
<h3>Alcance</h3>
<p>En este proyecto se creará un servicio <a href="https://en.wikipedia.org/wiki/Representational_state_transfer" target="_blank" rel="noopener noreferrer">REST</a> de consulta de productos que retorne la respuesta en formato <a href="https://en.wikipedia.org/wiki/JSON" target="_blank" rel="noopener noreferrer">JSON</a> utilizando <a href="https://maven.apache.org/" target="_blank" rel="noopener noreferrer">Maven</a> como herramienta de automatización de tareas.</p>
<h3>Herramientas Utilizadas</h3>
<p>Se requieren instaladas y disponibles las siguientes herramientas:</p>
<ul>
<li>Java 8</li>
<li>Maven 3.2 o superior</li>
</ul>
<h3>Procedimiento</h3>
<p>A continuación se detallan los pasos a seguir para conseguir el objetivo planteado. Si se desea acceder al <b>proyecto terminado</b>, ya sea para ejecutarlo directamente o para resolver alguna duda, éste está disponible en:</p>
<p><a href="https://github.com/softwareevolutivo/springboot-gs" target="_blank" rel="noopener noreferrer">https://github.com/softwareevolutivo/springboot-gs</a></p>
<h4>1. Configuración inicial del proyecto utilizando Maven</h4>
<p>Lo primero que se deberá realizar es crear el <strong>directorio del proyecto</strong>. En este caso se lo ha nombrado <b>springboot-gs</b>.<br>Dentro de este directorio crear el archivo POM (pom.xml) inicial, el cual deberá tener la siguiente definición.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;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"&gt;
    &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;

    &lt;groupId&gt;ec.com.softwareevolutivo.demos&lt;/groupId&gt;
    &lt;artifactId&gt;springbootgs&lt;/artifactId&gt;
    &lt;version&gt;0.0.1-SNAPSHOT&lt;/version&gt;
    &lt;name&gt;springbootgs&lt;/name&gt;
    &lt;description&gt;Spring Boot Getting Started&lt;/description&gt;

    &lt;parent&gt;
        &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
        &lt;artifactId&gt;spring-boot-starter-parent&lt;/artifactId&gt;
        &lt;version&gt;1.5.2.RELEASE&lt;/version&gt;
    &lt;/parent&gt;

&lt;/project&gt;</pre>
<p>En este primer paso se ha creado la relación de nuestro proyecto con el proyecto padre <b>spring-boot-starter-parent</b> utilizando la versión <b>1.5.2.RELEASE</b>. Esta simple definición permite a nuestro proyecto hacer ya uso de algunas funcionalidades de <strong>Spring Boot</strong>.</p>
<p>Estos grupos de funcionalidades son denominados <b>Starters</b>, más adelante se incorporará al proyecto un Starter adicional.</p>
<p>Para validar que todo está correctamente configurado ejecutamos un primer empaquetado utilizando Maven dentro del directorio del proyecto:</p>
<p><code>mvn package</code></p>
<p>El resultado de esta ejecución será la creación del directorio <b>target</b>, el cual deberá contener el archivo empaquetado del proyecto: <b>springboot-gs-0.0.1-SNAPSHOT.jar</b></p>
<p>Para finalizar esta primera parte, procederemos a consultar las dependencias con las que cuenta el proyecto:</p>
<p><code>mvn dependency:tree</code></p>
<p>En la salida de este comando no se verá ninguna dependencia relacionado al proyecto:</p>
<p><code>...<br>[INFO]<br>[INFO] --- maven-dependency-plugin:2.10:tree (default-cli) @ springbootgs ---<br>[INFO] ec.com.softwareevolutivo.demos:springbootgs:jar:0.0.1-SNAPSHOT<br>[INFO] ------------------------------------------------------------------------<br>[INFO] BUILD SUCCESS<br>...</code></p>
<h4>2. Dependencia Web</h4>
<p>Como el objetivo de esta demo incluye la creación de un servicio REST será necesario incorporar las dependencias Web de Spring. Esto se lo consigue adicionando al archivo POM el Starter respectivo, en este caso <b>spring-boot-starter-web</b> después de la sección <strong>parent</strong>.<b><br></b></p>
<pre class="EnlighterJSRAW" data-enlighter-language="xml">    ...
    &lt;/parent&gt;

    &lt;dependencies&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
            &lt;artifactId&gt;spring-boot-starter-web&lt;/artifactId&gt;
        &lt;/dependency&gt;
    &lt;/dependencies&gt;

&lt;/project&gt;</pre>
<p>Ejecutamos nuevamente la consulta de dependencias del proyecto:</p>
<p><code class="prettyprint lang-sh" data-start-line="1" data-visibility="visible" data-highlight="" data-caption="">mvn dependency:tree</code></p>
<p>Y en esta ocasión ya podremos ver las dependencias incorporadas al proyecto por medio del <strong>Starter Web</strong>. Es importante resaltar el hecho de que las versiones de las librerías incorporadas por el Starter son resueltas de manera automática.<br><code><br>...<br>[INFO]<br>[INFO] --- maven-dependency-plugin:2.10:tree (default-cli) @ springbootgs ---<br>[INFO] ec.com.softwareevolutivo.demos:springbootgs:jar:0.0.1-SNAPSHOT<br>[INFO] \- org.springframework.boot:spring-boot-starter-web:jar:1.5.2.RELEASE:compile<br>[INFO]    +- org.springframework.boot:spring-boot-starter:jar:1.5.2.RELEASE:compile<br>[INFO]    |  +- org.springframework.boot:spring-boot:jar:1.5.2.RELEASE:compile<br>[INFO]    |  +- org.springframework.boot:spring-boot-autoconfigure:jar:1.5.2.RELEASE:compile<br>[INFO]    |  +- org.springframework.boot:spring-boot-starter-logging:jar:1.5.2.RELEASE:compile<br>[INFO]    |  |  +- ch.qos.logback:logback-classic:jar:1.1.11:compile<br>[INFO]    |  |  |  +- ch.qos.logback:logback-core:jar:1.1.11:compile<br>[INFO]    |  |  |  \- org.slf4j:slf4j-api:jar:1.7.24:compile<br>[INFO]    |  |  +- org.slf4j:jcl-over-slf4j:jar:1.7.24:compile<br>[INFO]    |  |  +- org.slf4j:jul-to-slf4j:jar:1.7.24:compile<br>[INFO]    |  |  \- org.slf4j:log4j-over-slf4j:jar:1.7.24:compile<br>[INFO]    |  +- org.springframework:spring-core:jar:4.3.7.RELEASE:compile<br>[INFO]    |  \- org.yaml:snakeyaml:jar:1.17:runtime<br>[INFO]    +- org.springframework.boot:spring-boot-starter-tomcat:jar:1.5.2.RELEASE:compile<br>[INFO]    |  +- org.apache.tomcat.embed:tomcat-embed-core:jar:8.5.11:compile<br>[INFO]    |  +- org.apache.tomcat.embed:tomcat-embed-el:jar:8.5.11:compile<br>[INFO]    |  \- org.apache.tomcat.embed:tomcat-embed-websocket:jar:8.5.11:compile<br>[INFO]    +- org.hibernate:hibernate-validator:jar:5.3.4.Final:compile<br>[INFO]    |  +- javax.validation:validation-api:jar:1.1.0.Final:compile<br>[INFO]    |  +- org.jboss.logging:jboss-logging:jar:3.3.0.Final:compile<br>[INFO]    |  \- com.fasterxml:classmate:jar:1.3.3:compile<br>[INFO]    +- com.fasterxml.jackson.core:jackson-databind:jar:2.8.7:compile<br>[INFO]    |  +- com.fasterxml.jackson.core:jackson-annotations:jar:2.8.0:compile<br>[INFO]    |  \- com.fasterxml.jackson.core:jackson-core:jar:2.8.7:compile<br>[INFO]    +- org.springframework:spring-web:jar:4.3.7.RELEASE:compile<br>[INFO]    |  +- org.springframework:spring-aop:jar:4.3.7.RELEASE:compile<br>[INFO]    |  +- org.springframework:spring-beans:jar:4.3.7.RELEASE:compile<br>[INFO]    |  \- org.springframework:spring-context:jar:4.3.7.RELEASE:compile<br>[INFO]    \- org.springframework:spring-webmvc:jar:4.3.7.RELEASE:compile<br>[INFO]       \- org.springframework:spring-expression:jar:4.3.7.RELEASE:compile<br>[INFO] ------------------------------------------------------------------------<br>[INFO] BUILD SUCCESS<br></code></p>
<h4>3. La aplicación Spring Boot</h4>
<p>Para que la aplicación <strong>Spring Boot</strong> pueda ejecutarse desde la línea de comandos, se requiere la definición del conocido método <b>main</b>. Este método será utilizado por Spring Boot para iniciar la aplicación. Esto es esencial para que la aplicación se ejecute en modo stand-alone.</p>
<p>Esto se lo puede realizar creando una clase (<b>Application</b> en este caso) que implemente este método y que haga la llamada al método <b>run</b> de la clase <b>SpringApplication</b>.</p>
<p>Por convención, todas las clases Java deberán estar almacenadas en el directorio <b>src/main/java</b> dentro del directorio del proyecto. Hay que recordar que este archivo también debe residir dentro de un directorio correspondiente al paquete, en este caso <strong><span class="">ec/</span><span class="me0">com/</span><span class="me0">softwareevolutivo/</span><span class="me0">demos/</span><span class="me0">springbootgs</span></strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="java">package ec.com.softwareevolutivo.demos.springbootgs;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
    
}</pre>
<p>En este punto ya se podrá ejecutar la aplicación a través de Maven desde el directorio principal del proyecto:</p>
<p><code>mvn spring-boot:run</code></p>
<p>Esta ejecución levanta un servidor Web que escucha en el puerto por defecto <strong>8080</strong>. Se lo puede detener utilizando la combinación de teclas <strong>Control + C</strong>.</p>
<h4>4. Clase del dominio</h4>
<p>La clase <b>Product</b> será utilizada como parte del dominio del tipo <a href="https://en.wikipedia.org/wiki/Data_transfer_object" target="_blank" rel="noopener noreferrer">DTO</a> y tendrá la información correspondiente a cada producto de la lista que se desea retornar.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="java">package ec.com.softwareevolutivo.demos.springbootgs.domain.dto;

public class Product {

    private Long id;
    private String name;
    private double price;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

}</pre>
<h4>5. Servicio REST</h4>
<p>En este punto se procederá a crear el servicio REST que retornará la lista de productos en formato JSON. La clase <b>ProductRest</b> será utilizada para retornar la lista de productos.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="java">package ec.com.softwareevolutivo.demos.springbootgs.web.rest;

import java.util.ArrayList;
import java.util.List;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import ec.com.softwareevolutivo.demos.springbootgs.domain.dto.Product;

@RestController
@RequestMapping("/api")
public class ProductRest {

      @GetMapping("/products")
      public List&lt;Product&gt; getAllProducts() {
        
          List&lt;Product&gt; productList = new ArrayList&lt;Product&gt;();
          
          Product product1 = new Product();
          product1.setId(1L);
          product1.setName("Product 1");
          product1.setPrice(22.99);
          productList.add(product1);
          
          Product product2 = new Product();
          product2.setId(2L);
          product2.setName("Product 2");
          product2.setPrice(3.49);
          productList.add(product2);
          
          return productList;
          
      }
}</pre>
<p>Las anotaciones <b>@RestController</b>, <b>@RequestMapping</b> y <b>@GetMapping</b> pertenecen a Spring Web MVC y son utilizadas para crear el servicio REST.</p>
<p>Ejecutar nuevamente la aplicación y validar que el servicio REST esté operativo:</p>
<p><code>mvn spring-boot:run</code></p>
<p>Según lo establecido en la clase <b>ProductRest</b> parte del URL para acceder al servicio REST sería <strong>api/products</strong> y en este caso el servicio estaría disponible en <a href="http://localhost:8080/api/products" target="_blank" rel="noopener noreferrer">http://localhost:8080/api/products</a>.</p>
<p>Utilizando un navegador Web se podrá ver la respuesta del servicio REST:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="json">[
   {
      "id": 1
      "name": "Product 1",
      "price": 22.99
   },
   {
      "id": 1,
      "name": "Product 2",
      "price": 3.49
   }
]</pre>
<h4>6. Crear el ejecutable</h4>
<p>Para facilitar la transferencia de la aplicación en un solo empaquetado se puede convertir el archivo empaquetado <b>jar</b> en ejecutable. Esto se lo realiza por medio del plugin <b>spring-boot-maven-plugin</b>, el cual deberá ser adicionado a la configuración de maven.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="xml">    ...
    &lt;/dependencies&gt;

    &lt;build&gt;
        &lt;plugins&gt;
            &lt;plugin&gt;
                &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
                &lt;artifactId&gt;spring-boot-maven-plugin&lt;/artifactId&gt;
            &lt;/plugin&gt;
        &lt;/plugins&gt;
    &lt;/build&gt;

&lt;/project&gt;</pre>
<p>Como ya se lo hizo inicialmente, proceder con creación del empaquetado:</p>
<p><code>mvn package</code></p>
<p>En el directorio <b>target</b> deberán existir dos archivos empaquetados del proyecto:</p>
<ul>
<li>El archivo <b>springbootgs-0.0.1-SNAPSHOT.jar.original</b> solamente contiene las clases creadas para el proyecto y un par de archivos de metadata.</li>
<li>Por otro lado, el archivo <b>springbootgs-0.0.1-SNAPSHOT.jar</b>, de mayor tamaño, incluye todas las dependencias requeridas para ejecutar la aplicación en modo stand-alone.</li>
</ul>
<p>La ejecución de la aplicación <strong>stand-alone</strong> se la puede realizar utilizando Java Standard Edition (SE):</p>
<p><code>java -jar target/springboot-gs-0.0.1-SNAPSHOT.jar</code></p>
<h3>Resumen y conclusiones</h3>
<ul>
<li>Utilizando soluciones como <strong>Spring Boot</strong> se podría reducir considerablemente el tiempo de desarrollo de aplicaciones Web con servicios REST.</li>
<li>Spring Boot ha tenido un crecimiento importante en los últimos años. Generadores como <a href="https://jhipster.github.io/">JHipster</a> la están usando ampliamente.</li>
<li>En esta entrega se ha presentado Spring Boot de tal manera que el lector pueda empezar en su uso. En próximas entregas se podrá tratar otras de las ventajas que presenta la herramienta.</li>
</ul>
<h3>Referencias</h3>
<ul>
<li><a href="https://spring.io/guides/gs/spring-boot/" target="_blank" rel="noopener noreferrer">https://spring.io/guides/gs/spring-boot/</a></li>
<li><a href="https://spring.io/guides/gs/rest-service/" target="_blank" rel="noopener noreferrer">https://spring.io/guides/gs/rest-service/</a></li>
<li><a href="http://docs.spring.io/spring-boot/docs/1.5.2.RELEASE/reference/htmlsingle/" target="_blank" rel="noopener noreferrer">http://docs.spring.io/spring-boot/docs/1.5.2.RELEASE/reference/htmlsingle/</a></li>
</ul>
<p>En el caso de presentarse dudas, comentarios, erratas 🙂 los animamos a comentar. Recordar que también se puede compartir esta entrada por las redes sociales.[:]</p>
<p></p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				</div>
		<p>The post <a href="https://softwareevolutivo.com.ec/espanol-desarrollo-de-aplicaciones-web-con-spring-boot/">[:es]Desarrollo de aplicaciones Web con Spring Boot[:]</a> appeared first on <a href="https://softwareevolutivo.com.ec">Software Evolutivo</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://softwareevolutivo.com.ec/espanol-desarrollo-de-aplicaciones-web-con-spring-boot/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
