2016-03-07 61 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> 

希望这有助于!

相关问题