2016-03-07 1 views
1

То, что я пытаюсь сделать, это развернуть/обновить мою веб-заявку, используя его google appengine плагин для maven.Выполнение default-cli цели com.google.appengine: appengine-maven-plugin: 1.9.32: не удалось выполнить обновление

Поэтому я добавил плагин в моем pom.xml файле:

<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:

<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

Ну, на самом деле он сузил ошибку до класса' SdkResolver' в строке 50. Кажется, что плагин не может найти нужную версию appengine для извлечения из Maven. –

ответ

3

В этом случае у вас есть многомодульный проект Maven, и вы пытаетесь выполнить цель appengine:update на всей сборке, что, вероятно, невозможно, поскольку родительский/агрегаторный pom (где сборка не работает) не будет обеспечить структуру папок, которую ожидает цель, и, как таковые, вызывать ошибки.

На самом деле вы не хотите выполнять appengine:update на родительском, совместно используемом или модульном модуле и других.

Вы должны построить весь проект с помощью стандартного

mvn clean install 

Тогда только выполнить appengine:update на соответствующем модуле войны/уха (mz-web-server в вашем случае, я полагаю), то есть модуль, который вы эффективно хотите обновить до GAE.

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

Если профиль вы упомянули определяются в агрегаторе/родительском П и активируется во время многомодульных сборок, затем запустить appengine:update из корневого каталога будет использовать определенную конфигурацию и попытаться выполнить update целей на каждый модуль, который вам не нужен (и вы на самом деле не можете, учитывая эту ошибку, разумно).

Если вы хотите продолжать работать appengine:update от корня и только выполнить его на соответствующем модуле, то вы должны изменить конфигурацию выше pluginManagement:

  • Продолжайте pluginManagement только декларацию плагина (идентификатор_группы, артефакт версия)
  • Переместить конфигурацию этого плагина на соответствующем модуле (модуль mz-web-server)
  • Удалите appengin-maven-plugin декларацию от plugins части корневого П и мов e это к соответствующему модулю (с измененной конфигурацией, фактически).

Таким образом, плагин будет объявлен как управляемый построить мульти-модуль (через pluginManagement), но не эффективно использоваться в каждом модуле (через plugins), то только объявлять и использовать в соответствующем модуле.

Кроме того, поскольку вы не определяете какой-либо execution плагина во время сборки по умолчанию, вам даже не нужен профиль, который мне кажется. Конфигурация, которую вы определили, будет использоваться только явными вызовами командной строки, и ничего больше.


В принципе, вы могли бы иметь в своем агрегаторе/родителе П следующее:

<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> 

Примечания различного использования pluginManagement и plugins в разделе build. Для дальнейшего чтения, проверьте this SO post.

+0

Очень приятно! Спасибо за этот сложный ответ! Это работает! :) – displayname

0

Вот пример работы pom.xml от одного из моих GAE проектов:

<?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> 

Надеется, что это помогает!

Смежные вопросы