Usar Apache Maven y el complemento de App Engine (basado en la CLI de Google Cloud)

En esta página se explica cómo gestionar un proyecto de App Engine para tu API de Cloud Endpoints Frameworks mediante Apache Maven. Apache Maven es una herramienta de gestión y comprensión de proyectos de software capaz de crear archivos Web Application Archive (WAR) para implementarlos en App Engine. Google proporciona un complemento y arquetipos de Maven compatibles con Maven 3.3.9 o versiones posteriores.

Maven descarga las bibliotecas Java del SDK de App Engine. Puedes usar Maven para probar tu aplicación de forma local y desplegarla en App Engine.

Antes de empezar

  1. Usa la Google Cloud consola para crear y configurar tu Google Cloud proyecto:

    Ir a App Engine

    1. Selecciona o crea un Google Cloud proyecto.
    2. Si necesitas crear una aplicación de App Engine para tu proyecto, sigue las indicaciones para seleccionar la región en la que quieras ubicarla.
  2. Descarga e instala gcloud CLI y, a continuación, inicializa la CLI de Google Cloud.

    Si ya tienes instalada la CLI de Google Cloud y quieres configurarla para que use un Google Cloud ID de proyecto distinto del que usaste para inicializarla, consulta Gestionar configuraciones de la CLI de gcloud.

  3. Instala el componente app-engine-java de gcloud CLI:
    gcloud components install app-engine-java

    Nota: Para asegurarte de que tienes la versión más reciente de la CLI de gcloud para Java, ejecuta gcloud components update.

  4. Si no tienes Java, descárgalo, instálalo y configúralo.
  5. Define las marcas del compilador de Java en el archivo pom.xml de tu proyecto para especificar el código de bytes de Java 8:
    <properties>
      <maven.compiler.source>1.8</maven.compiler.source>
      <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
  6. Debes tener instalada la versión 3.3.9 de Apache Maven o una posterior. Para determinar tu versión de Maven, ejecuta el siguiente comando:
     mvn -v
  7. Si no tienes instalada la versión adecuada de Maven:
    1. Descarga la versión 3.3.9 o posterior de Maven desde el sitio web de Maven.
    2. Instala Maven en tu máquina local.

      Nota: Es posible que los usuarios de Linux tengan que descargar Maven en lugar de usar apt-get install.

Añadir el complemento Maven de App Engine a un proyecto (opcional)

Para usar el complemento Maven de App Engine en un proyecto Maven, añade lo siguiente a la sección plugins del archivo pom.xml del proyecto:

<plugin>
   <groupId>com.google.cloud.tools</groupId>
   <artifactId>appengine-maven-plugin</artifactId>
   <version>2.8.1</version>
</plugin>

Elegir un arquetipo de App Engine

Los arquetipos de Maven permiten a los usuarios crear proyectos de Maven mediante plantillas que abarcan situaciones habituales. App Engine aprovecha esta función de Maven para proporcionar algunos arquetipos de App Engine útiles en el repositorio central de Maven. Selecciona un arquetipo de App Engine adecuado para tu aplicación:

Tipo de aplicación Artefacto Descripción
Cloud Endpoints Frameworks para App Engine endpoints-skeleton-archetype Genera un proyecto de API de backend de Endpoints Frameworks para App Engine nuevo y vacío, listo para tus propias clases y recursos, con los archivos y directorios necesarios.
Cloud Endpoints Frameworks para App Engine hello-endpoints-archetype Genera un proyecto de API de backend de Endpoints Frameworks para App Engine inicial, listo para compilarse y ejecutarse.

Crear un proyecto con Maven

Durante la creación del proyecto, Maven te pedirá que proporciones el groupId, el artifactId, el version y el package del proyecto.

Término Significado
groupId Un espacio de nombres en Maven para hacer un seguimiento de tus artefactos. Cuando los usuarios consumen tu proyecto en su propio proyecto de Maven, este se convierte en un atributo de la dependencia que especifican.
artifactId El nombre de tu proyecto en Maven. También lo especifican los consumidores de tu proyecto cuando dependen de ti en sus propios proyectos de Maven.
version La versión inicial de Maven con la que quieres que se genere tu proyecto. Es recomendable que version vaya seguido de -SNAPSHOT, ya que así se ofrece compatibilidad con el complemento de lanzamiento de Maven para las versiones que están en desarrollo. Para obtener más información, consulta la guía de Maven sobre cómo usar el complemento de lanzamiento.
package El paquete de Java creado durante la generación.

Crear una aplicación de Endpoints Frameworks

En esta sección se describe cómo crear un proyecto de Endpoints Frameworks versión 2.0.

El hello-endpoints-archetype proporciona un ejemplo de uso de complementos, incluido el complemento Maven para App Engine y el complemento Maven para Endpoints Frameworks.

hello-endpoints-archetype genera una API Greetings de ejemplo con Endpoints Frameworks versión 2.0. También sirve de ejemplo para migrar tus aplicaciones de Endpoints Frameworks versión 1.0 a Endpoints Frameworks versión 2.0.

El README.md que se genera con el arquetipo proporciona información sobre dónde se ha producido la migración.

Para crear un proyecto de arquetipo de API de backend de Endpoints Frameworks para App Engine, haz lo siguiente:

  1. Cambia al directorio en el que quieras compilar el proyecto.

  2. Ejecuta el siguiente comando de Maven:

    mvn archetype:generate -Dgoogle-cloud-project=[YOUR-PROJECT-ID] -Dappengine-plugin=2.8.1 -Dendpoints-frameworks=2.1.0 -Dendpoints-plugin=1.0.2 -Dappengine-sdk=1.9.98 -Dfilter=com.google.appengine.archetypes:
    

    Donde:

    • -Dgoogle-cloud-project se ha asignado al ID de tu proyecto.
    • -Dappengine-plugin se ha definido en la versión más reciente del plugin Maven de App Engine.
    • -Dendpoints-frameworks se ha definido en la versión más reciente de Endpoints Frameworks para App Engine para las dependencias de Maven.
    • -Dendpoints-plugin se ha configurado con la versión más reciente del complemento Maven de Endpoints Frameworks para App Engine.
  3. Indica el número correspondiente a hello-endpoints-archetype.

  4. Seleccione la versión más reciente de la lista de versiones de arquetipo disponibles que se muestra.

  5. Cuando se le pida que Define value for property 'groupId', proporcione el espacio de nombres de su aplicación; por ejemplo, el valor com.example.helloendpoints.

  6. Cuando se le pida que Define value for property 'artifactId', proporcione el nombre del proyecto. Por ejemplo, proporcione el valor helloendpoints.

  7. Cuando se te pida que Define value for property 'version', acepta el valor predeterminado.

  8. Cuando se te pida que Define value for property 'package', acepta el valor predeterminado.

  9. Cuando se te pida que confirmes tus opciones, acepta el valor predeterminado introduciendo Y.

  10. Espera a que se termine de generar el proyecto. A continuación, cambia el directorio por el directorio del nuevo proyecto, por ejemplo, helloendpoints/.

  11. Compila el proyecto.

    mvn clean package
    
  12. Espera a que se compile el proyecto. Cuando el proyecto finalice correctamente, se mostrará un mensaje similar al siguiente:

    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 4.062 s
    [INFO] Finished at: 2017-02-28T00:28:03-08:00
    [INFO] Final Memory: 27M/485M
    [INFO] ------------------------------------------------------------------------
    
  13. Para probar el proyecto de forma local y desplegarlo en el entorno estándar de App Engine, consulta el artículo Gestionar, probar y desplegar un proyecto de Maven.

  14. Además, puedes generar bibliotecas de cliente de Java para la API Greeting mediante el plugin Maven de Endpoints Frameworks:

    mvn endpoints-framework:clientLibs
    

En el siguiente diagrama se muestra el diseño básico del proyecto de la API Greetings:

Estructura de proyectos de Maven

  • README.md contiene información sobre el ejemplo generado.
  • Greetings.java contiene una definición de API para una API de saludos de ejemplo.
  • Constants.java contiene constantes que usa la API Greetings de ejemplo.
  • HelloGreeting.java contiene un contenedor para los mensajes recibidos y enviados desde la API Greetings de ejemplo.
  • index.html contiene una interfaz de usuario sencilla para llamar a la API Greetings del backend.
  • base.js contiene el JavaScript necesario para que la interfaz de usuario haga solicitudes de backend.
  • build.gradle una vez generado, el ejemplo también admite Gradle y más información sobre esta función en la README.md.

Compilar y compilar tu aplicación

Para crear una aplicación creada con los arquetipos de Maven App Engine, sigue estos pasos:

  1. Cambia al directorio principal de tu proyecto. Por ejemplo, guestbook/.

  2. Ejecuta Maven:

    mvn clean package
    
  3. Espera a que se compile el proyecto. Cuando el proyecto finalice correctamente, se mostrará un mensaje similar al siguiente:

    BUILD SUCCESS
     Total time: 10.724s
     Finished at: 2016-08-04T16:18:24-07:00
     Final Memory: 24M/213M
    

Probar una aplicación con el servidor de desarrollo

Durante la fase de desarrollo, puedes ejecutar y probar tu aplicación en cualquier momento en el servidor de desarrollo ejecutando el complemento Maven de App Engine.

Para probar tu aplicación de Endpoints Frameworks para App Engine, sigue estos pasos:

  1. Si aún no lo has hecho, compila tu aplicación:

    mvn clean package
    
  2. Ejecuta el ejemplo de forma local:

    mvn appengine:run
    

    Espera a que se inicie el servidor. Cuando el servidor se haya iniciado por completo y tu aplicación esté en ejecución, se mostrará un mensaje similar al siguiente:

    [INFO] GCLOUD: INFO ### devappserver2.py:764] Skipping SDK update check.
    [INFO] GCLOUD: INFO ### api_server.py:268] Starting API server at: http://localhost:34199
    [INFO] GCLOUD: INFO ### dispatcher.py:199] Starting module "default" running at: http://localhost:8080
    [INFO] GCLOUD: INFO ### admin_server.py:116] Starting admin server at: http://localhost:8000
    [INFO] GCLOUD: ### com.google.appengine.tools.development.SystemPropertiesManager setSystemProperties
    
  3. Usa tu navegador para ir a http://localhost:8080/ y acceder a tu aplicación.

  4. Cierra la aplicación y el servidor de desarrollo pulsando Control+C.

Especificar un puerto para las pruebas locales

Cuando ejecutas tu aplicación en el servidor de desarrollo local, el puerto predeterminado es 8080. Puedes cambiar este valor predeterminado modificando la entrada del complemento de appengine-maven-plugin. Por ejemplo, puedes especificar el puerto y la dirección en el archivo pom.xml del directorio de tu aplicación:

<plugins>
   <plugin>
     <groupId>com.google.cloud.tools</groupId>
     <artifactId>appengine-maven-plugin</artifactId>
     <version>2.8.1</version>
     <configuration>
       <devserver.host>0.0.0.0</devserver.host>
       <devserver.port>8181</devserver.port>
     </configuration>
  </plugin>
</plugins>

En este ejemplo, <devserver.port> define el puerto 8181 en lugar del predeterminado y se especifica la dirección 0.0.0.0, lo que significa que el servidor de desarrollo escucha las solicitudes procedentes de la red local.

El prefijo devserver es opcional. Puedes usar <port>8181</port> en su lugar.

Depurar en el servidor de desarrollo

Para depurar una aplicación que se ejecuta de forma local, define jvmFlags en la configuración del complemento para habilitar la depuración en la JVM subyacente. Por ejemplo:

<configuration>
  <jvmFlags>
    <jvmFlag>-Xdebug</jvmFlag>
    <jvmFlag>-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005</jvmFlag>
  </jvmFlags>
</configuration>

Desplegar una aplicación

Para desplegar tu aplicación, sigue estos pasos:

mvn appengine:deploy

El appengine:deploy y todos los demás objetivos del complemento de Maven de App Engine tienen parámetros asociados que puedes usar. Para ver una lista completa de objetivos y parámetros, consulta Objetivos y parámetros del complemento de Maven de App Engine.

Siguientes pasos