5

我正在尝试制作一个简单的基础项目,以将我使用 Jax-RS 库制作的服务部署到我的 Google 应用引擎云空间。问题是我不知道如何正确配置插件以不继续查找目标文件夹下的 webapp 目录。Jax-rs 项目的结构将 web.xml 和所有其他 WEB-INF 文件放在资源目录而不是 webapp 目录下。有没有办法配置 maven 插件来部署我已经构建和压缩的 war 文件?

这是我看到的错误

[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 插件目标......

这是我的pom

<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

目前无法将 appengine-maven-plugin 配置为使用不同的目录存储战争内容。最好创建一个多模块构建,其中一个子模块只使用 maven-ant-plugin 来组装 war 目录,然后在其上运行插件。我认为我们不想在插件中进行配置,因为它与 maven-war-plugin 并不真正对齐,并且配置它会使您的项目难以设置为无缝使用 maven-war-plugin在将来。

您当前在 pom 中为 war-plugin 进行的配置不是必需的,除非您希望将版本号插入 appengine-web.xml。我很乐意帮助您设置 pom,以便官方的 Google App Engine Maven 插件为您正常工作。

于 2013-01-19T00:32:00.170 回答
1

(下面的说明适用于maven-gae-plugin,而不是 appengine-maven-plugin。我有没有告诉过你今天谷歌在开源方面有多糟糕?)

我认为您必须在您的 maven-gae-plugin 中添加一个名为appDir指向您的 webapp 目录的属性,如下所示:

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

但是,我必须强调,更改 Maven 中的路径会产生不良结果(您正在混合源代码和目标代码,您的 .ignore 文件会变得混乱,以及其他奇怪的事情)

请注意,您仍然需要在某个地方进行未打包的战争。实现这一点的一种方法是创建另一个 .war 项目并使用 dependencies-unpack 到其中。见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 )

(以防万一,我前段时间写了一个基于 JAX-RS 的 GAE 项目,并且它是开放的。有关概述,请参阅https://github.com/ipeirotis/ReadabilityMetrics/ )

于 2013-01-14T07:22:21.880 回答