5

Jax-RS ライブラリを使用して作成したサービスを Google アプリ エンジン クラウド スペースにデプロイするための単純な基本プロジェクトを作成しようとしています。問題は、プラグインを適切に構成して、ターゲットフォルダーの下の webapp ディレクトリを探し続けないようにする方法がわからないことです。Jax-rs プロジェクトの構造では、web.xml と他のすべての WEB-INF ファイルが、webapp ディレクトリではなく resources ディレクトリに配置されます。ビルド済みで圧縮済みの war ファイルをデプロイするように Maven プラグインを構成する方法はありますか?

これは私が見るエラーです

[INFO] Google App Engine アプリケーションを更新中 webapp ディレクトリ C:\dev\gameTrunk\server\target\HOMMTG-server-1.0 が見つかりません: AppCfg [options] [] []

アクションは次のいずれかでなければなりません: help: 特定のアクションのヘルプを出力します。
download_app: 以前にアップロードされたアプリ バージョンをダウンロードします。
request_logs: リクエスト ログを Apache 共通ログ形式で書き込みます。
rollback: 進行中の更新をロールバックします。start: 指定されたサーバー バージョンを開始します。

そして、それはすべての appengine プラグイン ターゲットで続きます...

これは私のポンです

<plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <version>2.5.1</version>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.3</version>
            <configuration>
                <archiveClasses>true</archiveClasses>
                <webResources>
                    <!-- in order to interpolate version from pom into appengine-web.xml -->
                    <resource>
                        <directory>${basedir}/src/main/resources/WEB-INF</directory>
                        <filtering>true</filtering>
                        <targetPath>WEB-INF</targetPath>
                    </resource>
                </webResources>
            </configuration>
        </plugin>
        <plugin>
            <groupId>com.google.appengine</groupId>
            <artifactId>appengine-maven-plugin</artifactId>
            <version>${appengine.target.version}</version>
        </plugin>
    </plugins>

これは単なるプラグインの部分ですが、WEB-INF ディレクトリのパスを除いて、ゲストブックのサンプル プロジェクトとほぼ同じです。

4

2 に答える 2

2

現在、war コンテンツに別のディレクトリを使用するように appengine-maven-plugin を構成する方法はありません。おそらく、1 つのサブモジュールが maven-ant-plugin を使用して war ディレクトリをアセンブルし、代わりにその上でプラグインを実行するマルチモジュール ビルドを作成するのが最善でしょう。maven-war-plugin と実際には一致しないため、プラグインで構成可能にしたいとは思いません。これを構成すると、maven-war-plugin をシームレスに使用するようにプロジェクトをセットアップすることが難しくなります。将来。

appengine-web.xml へのバージョン番号の補間が必要でない限り、pom の war-plugin 用に現在持っている構成は必要ありません。公式の Google App Engine Maven プラグインが正しく機能するように、pom を設定するお手伝いをさせていただきます。

于 2013-01-19T00:32:00.170 に答える
1

(以下の手順は、 appengine-maven- plugin ではなく、 maven-gae-pluginに適用されます。今日、Google がオープン ソースにどれだけ不満を持っているかを説明しましたか?)

appDir次のように、webapp ディレクトリを指すプロパティを maven-gae-plugin に追加する必要があると思います。

   <plugin>
        <groupId>net.kindleit</groupId>
        <artifactId>maven-gae-plugin</artifactId>
        <configuration>
          <appDir>PATH-TO-YOUR-BUILT-EXPLODED-WAR-PATH</appDir>
        </configuration>
   </plugin>

ただし、Maven でパスを変更すると望ましくない結果が生じることを強調しなければなりません (ソース コードとオブジェクト コードを混在させると、.ignore ファイルがめちゃくちゃになるなど、奇妙なことが起こります)。

展開された戦争がどこかにまだ必要であることに注意してください。これを実現する 1 つの方法は、別の .war プロジェクトを作成し、依存関係のアンパックを使用することです。http://maven.apache.org/plugins/maven-dependency-plugin/unpack-dependencies-mojo.htmlを参照してください。

(参照: https://github.com/maven-gae-plugin/maven-gae-plugin/blob/master/maven-gae-plugin/src/main/java/net/kindleit/gae/EngineGoalBase.java )

(念のため、私が少し前に書いた GAE 用の JAX-RS ベースのプロジェクトがあり、それが公開されています。概要については、https://github.com/ipeirotis/ReadabilityMetrics/を参照してください)

于 2013-01-14T07:22:21.880 に答える