Можно ли использовать модули appengine и облачные конечные точки?

Использование модулей appengine подразумевает создание динамического веб-приложения вместо обычного проекта веб-приложения appengine. Облачные конечные точки хорошо работают с обычными проектами веб-приложений appengine, но они не поддерживают модули appengine.

Проблема в том, что если я попытаюсь создать клиентскую библиотеку облачных конечных точек в динамическом веб-приложении, я получу сообщение об ошибке «Не проект App Engine».

Есть ли способ заставить динамическое веб-приложение распознаваться как проект App Engine, чтобы на нем можно было создавать клиентские библиотеки облачных конечных точек?


person Kidogo    schedule 04.08.2014    source источник
comment
Хотите поделиться любым из файлов? pom.xml, WEB-INF/web.xml, WEB-INF/dispatch.xml и результаты mvn clean, mvn appengine:endpoints_get_discovery_doc, mvn install   -  person Les Vogel - Google DevRel    schedule 07.08.2014
comment
Щелкните правой кнопкой мыши проект облачных конечных точек => Google App Engine WTP => Создание клиентской библиотеки облачных конечных точек было решением, когда приложения были созданы с использованием WTP.   -  person Kidogo    schedule 17.10.2014


Ответы (2)


В настоящее время работаю над той же проблемой, я думаю, что нашел решение со следующей настройкой (используя maven для java-проекта):

В корне проекта pom.xml: определяет несколько общих значений (например, используемую вами версию appengine), упаковку pom и ваши модули, особенно EAR:

<?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>com.example</groupId>
<artifactId>myproject-root</artifactId>
<version>1.0</version>
<packaging>pom</packaging>
<name>myproject-root</name>

<properties>
    <appengine.app.version>1</appengine.app.version>
    <appengine.target.version>1.9.11</appengine.target.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<modules>
    <module>myproject-ear</module>
    <module>myproject-cloud-endpoints</module>
    <module>myproject-backend</module>
</modules>

</project>

pom.xml модуля EAR должен иметь, конечно, упаковку EAR, но также и типизированные зависимости «войны» от других модулей, а параметр «распаковать типы» плагина maven-ear установлен на «война»:

<?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>

<parent>
    <groupId>com.example</groupId>
    <artifactId>myproject-root</artifactId>
    <version>1.0</version>
</parent>

<groupId>com.example</groupId>
<artifactId>myproject-ear</artifactId>
<version>1.0</version>
<packaging>ear</packaging>

<name>myproject-ear</name>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.5.1</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-ear-plugin</artifactId>
            <version>2.9</version>
            <configuration>
                <version>5</version>
                <defaultLibBundleDir>lib</defaultLibBundleDir>
                <unpackTypes>war</unpackTypes>
                <applicationXml>${project.basedir}/src/main/application/META-INF/maven-application.xml</applicationXml>
            </configuration>
        </plugin>
        <plugin>
            <groupId>com.google.appengine</groupId>
            <artifactId>appengine-maven-plugin</artifactId>
            <version>${appengine.target.version}</version>
        </plugin>
    </plugins>
</build>

<dependencies>
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>myproject-cloud-endpoints</artifactId>
        <version>1.0</version>
        <type>war</type>
    </dependency>
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>myproject-backend</artifactId>
        <version>1.0</version>
        <type>war</type>
    </dependency>
</dependencies>
<properties/>
</project>

Наконец, файл pom.xml "cloud-endpoints" должен быть настроен как базовый проект веб-приложения облачных конечных точек с "войной" упаковкой:

<?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>

<parent>
    <groupId>com.example</groupId>
    <artifactId>myproject-root</artifactId>
    <version>1.0</version>
</parent>

<groupId>com.example</groupId>
<artifactId>myproject-cloud-endpoints</artifactId>
<version>1.0</version>
<packaging>war</packaging>

<name>myproject-cloud-endpoints</name>

<dependencies>
    <!-- Compile/runtime dependencies -->
    <dependency>
        <groupId>com.google.appengine</groupId>
        <artifactId>appengine-api-1.0-sdk</artifactId>
        <version>${appengine.target.version}</version>
    </dependency>
    <dependency>
        <groupId>com.google.appengine</groupId>
        <artifactId>appengine-endpoints</artifactId>
        <version>${appengine.target.version}</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.inject</groupId>
        <artifactId>javax.inject</artifactId>
        <version>1</version>
    </dependency>
</dependencies>


<build>
    <!-- for hot reload of the web application in devserver-->
    <outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/classes</outputDirectory>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>versions-maven-plugin</artifactId>
            <version>2.1</version>
            <executions>
                <execution>
                    <phase>compile</phase>
                    <goals>
                        <goal>display-dependency-updates</goal>
                        <goal>display-plugin-updates</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <version>3.1</version>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <webXml>${project.build.directory}/generated-sources/appengine-endpoints/WEB-INF/web.xml</webXml>
                <webResources>
                    <resource>
                        <!-- this is relative to the pom.xml directory -->
                        <directory>${project.build.directory}/generated-sources/appengine-endpoints</directory>
                        <!-- the list has a default value of ** -->
                        <includes>
                            <include>WEB-INF/*.discovery</include>
                            <include>WEB-INF/*.api</include>
                        </includes>
                    </resource>
                </webResources>
            </configuration>
        </plugin>
        <plugin>
            <groupId>com.google.appengine</groupId>
            <artifactId>appengine-maven-plugin</artifactId>
            <version>${appengine.target.version}</version>
            <configuration>
                <enableJarClasses>false</enableJarClasses>
                <!-- Comment in the below snippet to bind to all IPs instead of just localhost -->
                <!-- address>0.0.0.0</address>
                <port>8080</port -->
                <!-- Comment in the below snippet to enable local debugging with a remove debugger
                     like those included with Eclipse or IntelliJ -->
                <!-- jvmFlags>
                  <jvmFlag>-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n</jvmFlag>
                </jvmFlags -->
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>endpoints_get_discovery_doc</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Building this project, you should be able to generate your cloud-endpoints client librariy through Eclipse: right click on the "cloud-endpoints" project => "Google App Engine WTP" => "Generate Cloud Endpoint Client Library" will generate everything needed in myproject-cloud-endpoints/endpoint-libs/.

Надеюсь, это поможет!

person Community    schedule 18.09.2014
comment
Спасибо. На самом деле, щелкните правой кнопкой мыши проект облачных конечных точек => Google App Engine WTP => Создать клиентскую библиотеку облачных конечных точек. Работает даже при использовании WTP и без maven - person Kidogo; 17.10.2014

Решение этого случая находится в ответе Франсуа ПУАЙЕ, но здесь представлена ​​версия, в которой не предполагается наличие maven.

Если вы используете WTP для создания приложения appengine и EAR и управления ими:

  1. Убедитесь, что вы находитесь в перспективе Java EE
  2. Щелкните правой кнопкой мыши проект облачных конечных точек => "Google App Engine WTP" => "Создать клиентскую библиотеку облачных конечных точек"

Если вы не видите Google App Engine WTP, а видите только Google, вероятно, вы не выбрали перспективу Java EE.

Вам не нужно использовать maven для этого, просто используйте WTP для создания и управления вашими EAR и appengine приложениями.

person Kidogo    schedule 17.10.2014