2011-12-19 9 views
6

Recentemente ho convertito la mia app Web GWT (GWT 2.4.0) in un progetto maven.
Sto usando Maven 2.2.1, gwt-maven plugin (2.4.0), Eclipse Indigo (3.7) e il plugin m2eclipse.Maven Project Builder viene richiamato ogni volta che cambio un file sorgente (GWT)

Le dipendenze e la configurazione generale sembrano andate bene mentre l'app web si compila senza problemi e funziona anche in modalità produzione.
Lo stesso vale per la modalità host.

però ho uno strano comportamento: Quando cambio una sola riga in un file sorgente Java/GWT, il Maven Project Builder viene invocato e questi passi richiede dolorosamente lungo (circa 10 secondi) ed Eclipse volte diventa inutilizzabile durante questo tempo.

Si tratta di un normale comportamento di m2eclipse?

E se lo è, c'è un modo per velocizzarlo?

Nota: ho dovuto configurare il plug-in del ciclo di vita per m2eclipse. Ecco l'importante sezione del file pom:

<build> 
     <!-- Generate compiled stuff in the folder used for developing mode --> 
     <outputDirectory>${webappDirectory}/WEB-INF/classes</outputDirectory> 

     <plugins> 

      <!-- GWT Maven Plugin --> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>gwt-maven-plugin</artifactId> 
       <version>2.4.0</version> 
       <executions> 
        <execution> 
         <goals> 
          <goal>compile</goal> 
          <goal>test</goal> 
         </goals> 
        </execution> 
       </executions> 
       <!-- Plugin configuration. There are many available options, see gwt-maven-plugin 
        documentation at codehaus.org --> 
       <configuration> 
        <runTarget>index.html</runTarget> 
        <hostedWebapp>${webappDirectory}</hostedWebapp> 
        <i18nMessagesBundle>com.gmi.nordborglab.testapp.client.Messages</i18nMessagesBundle> 
       </configuration> 
      </plugin> 

      <!-- Copy static web files before executing gwt:run --> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-war-plugin</artifactId> 
       <version>2.1.1</version> 
       <executions> 
        <execution> 
         <phase>compile</phase> 
         <goals> 
          <goal>exploded</goal> 
         </goals> 
        </execution> 
       </executions> 
       <configuration> 
        <webappDirectory>${webappDirectory}</webappDirectory> 
       </configuration> 
      </plugin> 
     </plugins> 

     <pluginManagement> 
      <plugins> 
       <plugin> 
        <groupId>org.eclipse.m2e</groupId> 
        <artifactId>lifecycle-mapping</artifactId> 
        <version>1.0.0</version> 
        <configuration> 
         <lifecycleMappingMetadata> 
          <pluginExecutions> 
           <pluginExecution> 
            <pluginExecutionFilter> 
             <groupId>org.codehaus.mojo</groupId> 
             <artifactId>gwt-maven-plugin</artifactId> 
             <versionRange>[2.4.0,)</versionRange> 
             <goals> 
              <goal>resources</goal> 
              <goal>compile</goal> 
             </goals> 
            </pluginExecutionFilter> 
            <action> 
             <execute /> 
            </action> 
           </pluginExecution> 
           <pluginExecution> 
            <pluginExecutionFilter> 
             <groupId>org.apache.maven.plugins</groupId> 
             <artifactId>maven-war-plugin</artifactId> 
             <versionRange>[2.1.1,)</versionRange> 
             <goals> 
              <goal>exploded</goal> 
             </goals> 
            </pluginExecutionFilter> 
            <action> 
             <execute /> 
            </action> 
           </pluginExecution> 

          </pluginExecutions> 
         </lifecycleMappingMetadata> 
        </configuration> 
       </plugin> 
      </plugins> 
     </pluginManagement> 

    </build> 

risposta

13

Questo illustra perfettamente il motivo per cui m2e non consente l'esecuzione di plug-in "sconosciuti" in base alla generazione incrementale predefinita (http://wiki.eclipse.org/M2E_plugin_execution_not_covered#Background). La maggior parte dei plugin Maven non sono adatti per la costruzione incrementale e fanno una compilazione completa ogni volta che vengono invocati (e come bonus, potresti ottenere perdite di classloader).

Nella sezione di gestione dei plug-in, è stato specificato che gwt: resources, gwt: compile e war: exploded devono essere eseguiti. Per impostazione predefinita, vengono eseguiti su build incrementali, ovvero su OGNI modifica delle risorse. Poiché questi obiettivi/plug-in non sono ottimizzati per una build incrementale, richiedono un po 'di tempo per essere completati.

Se si vuole velocizzare le cose, si può dire M2E di eseguire loro solo su Full costruisce (cioè dopo un progetto pulito) utilizzando

<execute> 
    <runOnIncremental>false</runOnIncremental> 
</execute> 

Poi, facendo manualmente un'eclisse generazione pulita verrà automaticamente grilletto la loro esecuzione. Essere consapevoli del fatto che JDT a volte decide di promuovere build incrementali a quelle complete.

credo (ma potrebbe essere sbagliato) che, se si sta utilizzando l'Eclipse Plugin di Google, si potrebbe ignorare GWT: risorse e GWT: la compilazione del tutto (sostituendo <eseguire> con <ignorano>).

9

La ragione per la costruzione Maven è più che probabile un permesso Maven Project Builder (Proprietà del progetto> Costruttori).

È possibile disattivarlo e - finché è selezionato il Java Builder - Eclipse continuerà a compilare i file modificati.

+0

Questa è un'idea interessante. Come si attiva la compilazione completa? Utilizzando pom.xml> Esegui come? –

+0

@MartinKersten: Sì, se richiamo correttamente Eclipse. Non l'ho usato da più di 2 anni :-P –

3

Beh, io di solito deselezionare:

Progetto | Build Automatically

Odio solo che si sta compilando tutto il tempo.

+3

Il potere di Eclipse e Java distrutto in una sola azione :-). Mi piace ottenere tutto compilato tutto il tempo e non mi piace tutto ciò che non lo fa (come GWT). Mi ha costretto a scrivere qualcosa di simile a GWT per un grande progetto in cui ne valeva la pena. Ci sono volute solo 2 settimane e sta facendo il suo lavoro in modo impeccabile. –

Problemi correlati