2012-10-23 14 views
40

Sto configurando un progetto Maven bambino genitore multi-modulo utilizzando Maven ed eclissi M2E, sto usando la roba più da Eclipse Juno SR1 che è M2E 1.2.0Come eliminare il "maven-enforcer-plugin (goal" enforce ") viene ignorato da m2e" warning di eclipse?

il pom genitore utilizza il plugin enforcer, in modo che il genitore pom.xml ha il seguente nella sua sezione plug

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-enforcer-plugin</artifactId> 
    <version>1.1.1</version> 
    <executions> 

     <!-- Enforce that all versions of a transative dependency must converge. --> 
     <execution> 
      <id>enforce</id> 
      <configuration> 
       <rules> 
        <DependencyConvergence /> 
       </rules> 
      </configuration> 
      <goals> 
       <goal>enforce</goal> 
      </goals> 
     </execution> 

     <!-- Black list certain jars --> 
     <execution> 
      <id>enforce-banned-dependencies</id> 
      <goals> 
       <goal>enforce</goal> 
      </goals> 
      <configuration> 
       <rules> 
        <bannedDependencies> 
         <excludes> 
          <exclude> 
           commons-logging:commons-logging 
          </exclude> 
         </excludes> 
        </bannedDependencies> 
       </rules> 
       <fail>true</fail> 
      </configuration> 
     </execution> 

    </executions> 
</plugin> 

Ciascuno dei progetti bambino ha un messaggio di errore che dice maven-enforcer-plugin (goal "enforce") is ignored by m2e.

  • Qual è il significato di questo messaggio?
  • Come configurare le cose per sbarazzarsi di questo messaggio?
  • devo configurare le impostazioni del progetto eclipse o le impostazioni pom.xml?

risposta

52

Il plug-in maven di eclipse esegue un file pom.xml di progetti per capire come è configurato il progetto maven e convertire la configurazione di maven pom.xml in una configurazione di eclissi. Un pom.xml può fare riferimento a un numero arbitrario di plug-in maven e ognuno di questi plug-in ha il potenziale di perdere memoria o fare cose che sono dannose per Eclipse. Quindi, per impostazione predefinita, il plugin m2e eclipse ignora tutti i plugin Maven a meno che questi plugin Maven non abbiano uno speciale connettore per m2e che dice a m2e come integrare il plugin di maven in eclissi. In sintesi, m2e sta difendendo il processo JVM di eclissi contro un plug-in maven buggy, dicendo che per ogni plugin di maven deve esserci un connettore m2e da ​​collegare tra maven ed eclipse.

Quindi, per sbarazzarsi di l'avvertimento ho aggiunto il seguente alla mia sezione di gestione plug-in del pom.xml genitore

<build> 
    <pluginManagement> 
    <plugins> 
     <plugin> 
     <groupId>org.eclipse.m2e</groupId> 
     <artifactId>lifecycle-mapping</artifactId> 
     <version>1.0.0</version> 
     <configuration> 
      <lifecycleMappingMetadata> 
      <pluginExecutions> 
       <pluginExecution> 
       <pluginExecutionFilter> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-enforcer-plugin</artifactId> 
        <versionRange>[1.0.0,)</versionRange> 
        <goals> 
        <goal>enforce</goal> 
        </goals> 
       </pluginExecutionFilter> 
       <action> 
        <ignore /> 
       </action> 
       </pluginExecution> 
      </pluginExecutions> 
      </lifecycleMappingMetadata> 
     </configuration> 
     </plugin> 
    </plugins> 
    </pluginManagement> 
</build> 

Sembra che org.eclipse.m2e:lifecycle-mapping è un esperto di plugin concepito per contenere i metadati per comunicare con Eclipse m2e plugin quando elabora un maven pom.xml e questa informazione viene usata per dire ad eclipse cosa fare con i plugin Maven che sono definiti in pom.xml quando eclipse esegue pom.xml come parte dell'interfaccia utente di eclipse.

+1

+1 abbastanza interessante, questo funziona anche sul POM figlio. –

+3

@ams la tua risposta ha fatto il trucco! Ma ... ho inserito il plugin di lifecycle-mapping nella sezione plugins e non ha funzionato, deve essere nella sezione pluginManagement pom (come nel tuo esempio!) Spero che questo salvi qualcuno alcuni fastidiosi minuti di cercare di capire perché la soluzione non funziona. –

+0

Se possibile, aggiornare il plugin maven-enforcer alla versione 1.4+. Intorno al gennaio 2015 Karl Heinz Marbaise ha aggiunto metadati del ciclo di vita di m2e a questo plug-in maven con questa correzione: "Aggiungi mappatura m2e", https://issues.apache.org/jira/browse/MENFORCER-219. Quindi non dovrai aggiungere manualmente i metadati di m2e. – buzz3791

2

Solo una FYI per quelli di voi che hanno un problema con la configurazione dell'IDE nel modello di build. Tenete d'occhio questa richiesta di miglioramento attualmente mirato per il rilascio Kepler:

Bug 350.414: Conservare ignorato connettori M2E fuori progetto pom.xml https://bugs.eclipse.org/bugs/show_bug.cgi?id=350414

+0

Thx per i vostri sforzi su questo. È bello che verrà aggiunto alla prossima versione di m2e. – Snicolas

0

Per me è stato simile edizione

ho avuto Maven 3.0.3 e Java 1.5

e il mio pom avevano

<executions> 
        <execution> 
         <id>enforce-versions</id> 
         <goals> 
          <goal>enforce</goal> 
         </goals> 
         <configuration> 
          <rules> 
           <requireMavenVersion> 
            <version>[3.0.3,2.2.1,)</version> 
           </requireMavenVersion> 
           <requireJavaVersion> 
            <version>[1.7, 1.8)</version> 
           </requireJavaVersion> 
          </rules> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 

Come puoi vedere, non ho mai rispettato le regole, quindi ho aggiornato Java e ho iniziato a lavorare e sono stato impostato. Spero che questo aiuti qualcuno.

0

Un'altra trappola esiste quando si hanno diversi pluginExecutionFilters. Questi devono essere nel posto giusto nel pom.xml! Per me era nettamente da trovare come nessun errore o avvertimento dello spostamento esistito.

Questo è il codice giusto per avere diversi pluginExecutionFilters:

<build> 
    <pluginManagement> 
    <plugins> 
     <plugin> 
     <groupId>org.eclipse.m2e</groupId> 
     <artifactId>lifecycle-mapping</artifactId> 
     <version>1.0.0</version> 
     <configuration> 
     <lifecycleMappingMetadata> 
      <pluginExecutions> 
       <pluginExecution> 
        <pluginExecutionFilter> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-enforcer-plugin</artifactId> 
         <versionRange>[1.0.0,)</versionRange> 
         <goals> 
          <goal>enforce</goal> 
         </goals> 
        </pluginExecutionFilter> 
        <action><ignore/></action> 
       </pluginExecution> 
<!-- now here follows the new filter --> 
       <pluginExecution> 
        <pluginExecutionFilter> 
         <groupId>com.googlecode.maven-java-formatter-plugin</groupId> 
         ... 
4

Da M2E versione 1.4 e superiori: È possibile integrare il ciclo di vita-configurazione necessaria all'interno del pom (genitore-pom o progetto-pom) o puoi integrare le informazioni nella configurazione globale di m2e all'interno di Eclipse. Hai anche alcune azioni rapide per applicare queste modifiche.

L'ultima opzione è cercare connettori m2e o passare a versioni più recenti di diversi plug-in maven con supporto m2e integrato (ad esempio per jaxb-plugins).

Qui (per enforcer-plugin) Penso che la definizione nel pom sia il modo più semplice.

Consulta anche: https://www.eclipse.org/m2e/documentation/m2e-execution-not-covered.html

0

Come eliminare il “maven-enforcer-plugin (obiettivo” far rispettare “) viene ignorato dal M2E” warning da Eclipse?

Anche se il plugin di Eclipse lifecycle-mapping ha funzionato per me su altri progetti, Attualmente sto lavorando in un negozio di IntelliJ con il mio Eclipse occulta e io non voglio espormi cambiando tutti i loro file pom per includere qualsiasi cosa dal gruppo org.eclipse.m2e.

Dopo alcuni esperimenti, ho scoperto che è possibile ottenere questo avviso non visualizzato modificando i mapping del ciclo di vita nelle preferenze Maven. Francamente non sono sicuro al 100% di cosa stia facendo, ma non ho visto nessun effetto collaterale ...

Vai a: Preferences & rightarrow; Maven e rightarrow; Mapping del ciclo di vita. Facendo clic su Open workspace lifecycle mappings metadata che aprirà il file lifecycle-mapping-metadata.xml in una scheda in background. Presumo che questo cooresponds al seguente file sotto il vostro spazio di lavoro subdir:

.metadata/.plugins/org.eclipse.m2e.core/lifecycle-mapping-metadata.xml 

Avanti aggiungere il seguente stanza alla fine del file all'interno di <pluginExecutions>...</pluginExecutions>.

<pluginExecution> 
    <pluginExecutionFilter> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-enforcer-plugin</artifactId> 
     <versionRange>[1.0.0,)</versionRange> 
     <goals> 
      <goal>enforce</goal> 
     </goals> 
    </pluginExecutionFilter> 
    <action> 
     <ignore /> 
    </action> 
</pluginExecution> 

Una volta che il file XML viene salvato è necessario tornare alla finestra delle preferenze e premere Reload workspace lifecycle mappings metadata che compila il file in qualche modo. Infine, dovrai fare un progetto di aggiornamento di maven su tutti i tuoi progetti per vedere sparire gli avvertimenti.

Spero che questo aiuti.

Problemi correlati