2016-03-07 35 views
1

我正在嘗試使用他的google appengine插件爲maven部署/更新我的web應用程序。目標com.google.appengine的執行默認cli:appengine-maven-plugin:1.9.32:更新失敗

<project> 

    <!-- .. --> 

    <profiles> 
     <profile> 
      <build> 
       <pluginManagement> 
        <plugins> 

         <plugin> 
          <groupId>com.google.appengine</groupId> 
          <artifactId>appengine-maven-plugin</artifactId> 
          <version>${appengine.version}</version> 
          <configuration> 
           <enableJarClasses>false</enableJarClasses> 
           <version>${app.version}</version> 
          </configuration> 
         </plugin> 

         <plugin> 
          <groupId>com.google.appengine</groupId> 
          <artifactId>gcloud-maven-plugin</artifactId> 
          <version>${gcloud.plugin.version}</version> 
          <configuration> 
           <set_default>true</set_default> 
          </configuration> 
         </plugin> 

        </plugins> 
       </pluginManagement> 

       <plugins> 
        <plugin> 
         <groupId>com.google.appengine</groupId> 
         <artifactId>appengine-maven-plugin</artifactId> 
         <version>${appengine.version}</version> 
        </plugin> 
       </plugins> 

      </build> 
     </profile> 
    </profiles> 
</project> 

我還添加了pluginGroup:

所以我在pom.xml文件添加插件

<pluginGroups> 
    <!-- pluginGroup 
    | Specifies a further group identifier to use for plugin lookup. 
    <pluginGroup>com.your.plugins</pluginGroup> 
    --> 
    <pluginGroup>com.google.appengine</pluginGroup> 
    </pluginGroups> 

但是,如果我叫mvn appengine:update我收到

[INFO] Error stacktraces are turned on. 
[INFO] Scanning for projects... 
[INFO] ------------------------------------------------------------------------ 
[INFO] Reactor Build Order: 
[INFO] 
[INFO] mz-parent 
[INFO] mz-web-shared 
[INFO] mz-data-model 
[INFO] mz-web-client 
[INFO] mz-mobile-rest-shared 
[INFO] mz-mobile-rest-api 
[INFO] mz-web-server 
[INFO] 
[INFO] ------------------------------------------------------------------------ 
[INFO] Building mz-parent 0.1-SNAPSHOT 
[INFO] ------------------------------------------------------------------------ 
[INFO] 
[INFO] >>> appengine-maven-plugin:1.9.32:update (default-cli) > package @ mz-parent >>> 
[INFO] 
[INFO] --- maven-enforcer-plugin:1.2:enforce (enforce-maven) @ mz-parent --- 
[INFO] 
[INFO] <<< appengine-maven-plugin:1.9.32:update (default-cli) < package @ mz-parent <<< 
[INFO] 
[INFO] --- appengine-maven-plugin:1.9.32:update (default-cli) @ mz-parent --- 
[INFO] 
[INFO] Google App Engine Java SDK - Updating Application 
[INFO] 
[INFO] Retrieving Google App Engine Java SDK from Maven 
[INFO] ------------------------------------------------------------------------ 
[INFO] Reactor Summary: 
[INFO] 
[INFO] mz-parent .................................... FAILURE [ 0.390 s] 
[INFO] mz-web-shared ................................ SKIPPED 
[INFO] mz-data-model ................................ SKIPPED 
[INFO] mz-web-client ................................ SKIPPED 
[INFO] mz-mobile-rest-shared ........................ SKIPPED 
[INFO] mz-mobile-rest-api ........................... SKIPPED 
[INFO] mz-web-server ................................ SKIPPED 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 1.460 s 
[INFO] Finished at: 2016-03-18T00:33:58+01:00 
[INFO] Final Memory: 16M/226M 
[INFO] ------------------------------------------------------------------------ 
[ERROR] Failed to execute goal com.google.appengine:appengine-maven-plugin:1.9.32:update (default-cli) on project mz-parent: Execution default-cli of goal com.google.appengine:appengine-maven-plugin:1.9.32:update failed. NoSuchElementException -> [Help 1] 
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal com.google.appengine:appengine-maven-plugin:1.9.32:update (default-cli) on project mz-parent: Execution default-cli of goal com.google.appengine:appengine-maven-plugin:1.9.32:update failed. 
     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:224) 
     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) 
     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) 
     at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116) 
     at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80) 
     at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51) 
     at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128) 
     at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307) 
     at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193) 
     at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106) 
     at org.apache.maven.cli.MavenCli.execute(MavenCli.java:862) 
     at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:286) 
     at org.apache.maven.cli.MavenCli.main(MavenCli.java:197) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:497) 
     at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289) 
     at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229) 
     at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415) 
     at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356) 
Caused by: org.apache.maven.plugin.PluginExecutionException: Execution default-cli of goal com.google.appengine:appengine-maven-plugin:1.9.32:update failed. 
     at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:145) 
     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208) 
     ... 20 more 
Caused by: java.util.NoSuchElementException 
     at com.google.common.collect.AbstractIterator.next(AbstractIterator.java:154) 
     at com.google.common.collect.Iterators.find(Iterators.java:717) 
     at com.google.common.collect.Iterables.find(Iterables.java:646) 
     at com.google.appengine.SdkResolver.getSdk(SdkResolver.java:50) 
     at com.google.appengine.appcfg.AbstractAppCfgMojo.resolveAndSetSdkRoot(AbstractAppCfgMojo.java:393) 
     at com.google.appengine.appcfg.Update.execute(Update.java:26) 
     at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134) 
     ... 21 more 
[ERROR] 
[ERROR] Re-run Maven using the -X switch to enable full debug logging. 
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles: 
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginExecutionException 

問題:如何解決這個問題?

+0

錯誤的完整堆棧跟蹤是否有幫助? (使用'-e'開關運行)。 –

+0

@GilbertoTorrezan我在使用'-e'開關後更新了我的問題,但輸出結果並沒有真正幫助我^^ – displayname

+0

嗯,實際上它將錯誤縮小到了第50行的'SdkResolver'類。看起來插件無法找到從Maven檢索的正確的appengine版本。 –

回答

3

在這種情況下,您有一個多模塊Maven項目,並且您試圖在整個構建中執行appengine:update目標,這可能是不可能的,因爲父/集合器pom(構建失敗)不會提供目標所期望的文件夾結構,並因此導致錯誤。

實際上,您不希望對父級,共享或模型模塊等執行appengine:update

你應該通過標準

mvn clean install 

構建整個項目,然後只(在你的情況mz-web-server,我想)有關戰爭/耳模塊上執行appengine:update,也就是說,模塊,您可以有效想要更新到GAE。

cd mz-web-server <-- move to the concerned module 
mvn appengine:update 

如果你所提到的配置文件在多模塊構建過程中聚合/父POM定義和激活,然後從根目錄下運行appengine:update將使用定義的配置,並嘗試上執行update目標每一個模塊,這是你不想要的東西(而且你真的不能,因爲錯誤,合理)。

如果你想保持從根運行appengine:update,只執行它的相關模塊,那麼你應該修改你上面的pluginManagement配置:

  • 繼續pluginManagement只有插件聲明(的groupId,artifactId的,版本)
  • 動議插件的配置有關模塊上(該mz-web-server模塊)
  • 從根POM和MOV的plugins部卸下appengin-maven-plugin聲明將其發送到相關模塊(實際上移到上面的配置)。

這樣,插件將被聲明爲(通過pluginManagement)由多模塊構建管理,但每一個模塊在沒有得到有效利用(通過plugins),則僅聲明和有關模塊中使用。

此外,由於您在默認構建期間沒有定義插件的任何execution,所以您甚至不需要我相信的配置文件。您定義的配置只能用於明確的命令行調用,沒有別的。


基本上,你可以在你的聚合器/父POM如下:

<project> 
    <build> 
     <pluginManagement> 
      <plugins> 
       <plugin> 
        <groupId>com.google.appengine</groupId> 
        <artifactId>appengine-maven-plugin</artifactId> 
        <version>${appengine.version}</version> 
       </plugin> 

       <plugin> 
        <groupId>com.google.appengine</groupId> 
        <artifactId>gcloud-maven-plugin</artifactId> 
        <version>${gcloud.plugin.version}</version> 
       </plugin> 
      </plugins> 
     </pluginManagement> 
    </build> 

    <profiles> 
     <profile> 
      <!-- do you really need it? :) --> 
     </profile> 
    </profiles> 
</project> 

然後,你mz-web-server模塊中的以下內容:

<project> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>com.google.appengine</groupId> 
       <artifactId>appengine-maven-plugin</artifactId> 
       <!-- you don't need to re-define the version here --> 
       <!-- version is taken from pluginManagement from the parent --> 
       <configuration> 
        <enableJarClasses>false</enableJarClasses> 
        <version>${app.version}</version> 
       </configuration> 
      </plugin> 

      <plugin> 
       <groupId>com.google.appengine</groupId> 
       <artifactId>gcloud-maven-plugin</artifactId> 
       <!-- again, no version here --> 
       <configuration> 
        <set_default>true</set_default> 
       </configuration> 
      </plugin> 

     </plugins> 
    </build> 

</project> 

注意不同的使用pluginManagementplugins內的build部分。如需進一步閱讀,請查詢this SO post

+0

非常好!謝謝你這個精心設計的答案!這工作! :) – displayname

0

下面是從我的GAE項目之一工作的pom.xml的樣本:

<?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> 
    <packaging>war</packaging> 
    <version>1.0-SNAPSHOT</version> 

    <groupId>com.gae.mvn.demo</groupId> 
    <artifactId>gae-maven-demo</artifactId> 

    <properties> 
     <app.id>your-app-id</app.id> 
     <app.version>1</app.version> 
     <appengine.version>1.9.32</appengine.version> 
     <gcloud.plugin.version>2.0.9.74.v20150814</gcloud.plugin.version> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <maven.compiler.showDeprecation>true</maven.compiler.showDeprecation> 
     <spring.version>4.2.5.RELEASE</spring.version> 
    </properties> 

    <prerequisites> 
     <maven>3.1.0</maven> 
    </prerequisites> 

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

    </dependencies> 

    <build> 
     <!-- for hot reload of the web application --> 
     <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> 

        <archiveClasses>true</archiveClasses> 
        <webResources> 
         <resource> 
          <directory>${basedir}/src/main/webapp/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.version}</version> 
       <configuration> 
        <enableJarClasses>false</enableJarClasses> 
        <version>${app.version}</version> 
       </configuration> 
      </executions> 
      </plugin> 
      <plugin> 
       <groupId>com.google.appengine</groupId> 
       <artifactId>gcloud-maven-plugin</artifactId> 
       <version>${gcloud.plugin.version}</version> 
       <configuration> 
        <set_default>true</set_default> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

希望這有助於!

相關問題