1

appengine モジュールを使用するということは、通常の appengine Web アプリケーション プロジェクトではなく、動的 Web アプリケーションを作成することを意味します。クラウド エンドポイントは、通常の appengine Web アプリケーション プロジェクトでうまく機能しますが、これらは appengine モジュールをサポートしていません。

問題は、動的 Web アプリケーションでクラウド エンドポイント クライアント ライブラリを生成しようとすると、「App Engine プロジェクトではありません」というエラーが表示されることです。

クラウド エンドポイント クライアント ライブラリを生成できるように、動的 Web アプリケーションを App Engine プロジェクトとして認識させる方法はありますか?

4

2 に答える 2

0

現在同じ問題に取り組んでいますが、次のセットアップで解決策を見つけたと思います(Javaプロジェクトにmavenを使用):

project-root 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>

EAR モジュールの pom.xml には、もちろん EAR パッケージが必要ですが、他のモジュールへの "war" タイプの依存関係と、"war" に設定された maven-ear プラグインの "unpack types" オプションも必要です。

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

最後に、「cloud-endpoints」pom.xml は、「war」パッケージを使用して基本的なクラウド エンドポイント Web アプリケーション プロジェクトとして構成する必要があります。

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

このプロジェクトをビルドすると、Eclipse を介してクラウド エンドポイント クライアント ライブラリを生成できるはずです。「cloud-endpoints」プロジェクトを右クリック => 「Google App Engine WTP」 => 「クラウド エンドポイント クライアント ライブラリの生成」により、必要なものがすべて生成されます。でmyproject-cloud-endpoints/endpoint-libs/

それが役立つことを願っています!

于 2014-09-18T08:04:38.680 に答える
0

この場合の解決策は François POYER の回答内にありますが、これは Maven を想定していないバージョンです。

WTP を使用して appengine アプリケーションと EAR を作成および管理している場合:

  1. Java EE パースペクティブにいることを確認します
  2. クラウド エンドポイント プロジェクトを右クリック => 「Google App Engine WTP」 => 「クラウド エンドポイント クライアント ライブラリの生成」

Google App Engine WTPが表示されず、「Google」しか表示されない場合は、Java EE パースペクティブを選択していない可能性があります。

これには Maven を使用する必要はありません。単に WTP を使用して、EAR と appengine アプリケーションを作成および管理します。

于 2014-10-17T14:33:47.993 に答える