2013-01-14 50 views
5

我正在嘗試做一個簡單的基礎項目來部署我在Google應用引擎雲空間中使用Jax-RS librarys的服務。問題是我不知道如何正確配置插件,以便不要在目標文件夾下查找webapp目錄。 Jax-rs項目的結構將web.xml和所有其他WEB-INF文件放在資源目錄下,而不是webapp目錄下。有沒有辦法配置maven插件來部署我已經構建並壓縮的war文件?使用google appengine maven插件部署Jax-RS戰爭

這是錯誤我看到

[INFO]更新谷歌App Engine應用程式無法找到 webapp目錄C:\ dev的\ gameTrunk \服務器\目標\ HOMMTG服務器-1.0 用法: AppCfg [選項] [] []

操作必須是以下操作之一:help:打印特定操作的幫助。
download_app:下載先前上傳的應用程序版本。
request_logs:以Apache公用日誌格式寫請求日誌。
回滾:回滾正在進行的更新。開始:啓動指定的 服務器版本。

,並繼續與所有的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目錄的路徑

回答

1

(下面的說明適用於maven-gae-plugin,而不是appengine-maven-plugin。 我告訴過你有多少Google s ?ucks開源今天)

我想你一定在你的maven-GAE-插件名爲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項目並使用依賴關係 - 將其解壓縮。見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/的概述。)

+0

嗯,我會嘗試解壓縮選項,如果這是唯一的方式來使用這個appengine-maven插件。你知道是否有一些文檔可以描述插件配置選項,以及它從分發中期望/需要做什麼? – Flostation

+0

@aldrinleal,你確定appDir在appengine-maven-plugin中是一個有效的配置嗎?我在[原始來源]中看不到它(http://code.google.com/p/appengine-maven-plugin/source/browse/src/main/java/com/google/appengine/AbstractAppCfgMojo.java )。請注意,它是maven-gae-plugin中的一個有效參數,與appengine-maven-plugin不同。 – yorkw

+0

不錯的一個。我不知道有一個appengine-maven插件。你是對的 - AppDir是硬編碼的(參見http://code.google.com/p/appengine-maven-plugin/source/browse/src/main/java/com/google/appengine/appcfg/Update.java ) – aldrinleal

2

目前沒有辦法配置appengine-maven插件來爲戰爭內容使用不同的目錄。最好的做法是創建一個多模塊構建,其中一個子模塊只使用maven-ant插件來組裝war目錄,然後運行插件。我不認爲我們想要在插件中進行配置,因爲它並不真正與Maven-War-plugin配合,並且配置這會使設置項目難以無縫地使用maven-war-plugin在將來。

除非要將版本號插入到appengine-web.xml中,否則目前針對您的pom中的war-plugin所具有的配置是不必要的。我很樂意幫助設置您的pom,以便官方的Google App Engine Maven插件能夠爲您正確地工作。

+0

我沒有在這臺機器上有我的pom文件給你,但我的項目的要點是我正在用jax-rs庫構建一場戰爭,標準資源目錄來容納所有的INF目錄。不同項目的輸出是該戰爭文件。我有一個單獨的項目只是爲了上傳到應用程序引擎。但它似乎不能配置爲只使用我提供的戰爭。如果你可以想辦法用壓縮的戰爭文件來做到這一點,我會感興趣,但如果它不可能,我會把它作爲構建的一部分來爆炸。我的問題就變成了,應用程序引擎插件需要暴露什麼? – Flostation

+1

您需要立即爆炸。聽起來我們可以在這方面做一些工作,讓我考慮一下。我看到項目中記錄的一些問題,以使這種體驗更好。我現在陷入了其他一些項目,但讓我看看我能做些什麼。 – MattStep

+0

謝謝馬特!你搖滾。 – Flostation