Eclipse ha il concetto di build incrementali, che è incredibilmente utile in quanto consente di risparmiare molto tempo.
Come è utile
Supponi di aver appena modificato un singolo file .java. I costruttori incrementali saranno in grado di compilare il codice senza dover ricompilare tutto (il che richiederà più tempo).
Ora qual è il problema con i plugin Maven
La maggior parte dei plugin Maven non sono progettati per build incrementali e quindi creano problemi per m2e. m2e non sa se l'obiettivo del plugin è qualcosa di cruciale o se è irrilevante. Se esegue ogni plugin quando cambia un singolo file, ci vorrà molto tempo.
Questo è il motivo per cui m2e fa affidamento sulle informazioni dei metadati per capire come deve essere gestita l'esecuzione. m2e ha messo a punto diverse opzioni per fornire queste informazioni sui metadati e l'ordine di preferenza è il seguente (dal più alto al più basso)
- pom.xml file del progetto
- file genitore, nonno e così via pom.xml
- [m2e 1.2+] preferenze dell'area di lavoro
- estensioni m2e installate
- [m2e 1.1+] metadati della mappatura del ciclo di vita forniti dal plugin maven
- metadati di mappatura del ciclo di vita predefiniti forniti con m2e
1,2 si riferisce alla specifica della sezione pluginManagement nel tag del tuo file pom o di uno dei suoi genitori. M2E legge questa configurazione per configurare il progetto. Di seguito lo snippet indica a m2e di ignorare gli obiettivi jslint
e compress
del plugin yuicompressor-maven
<pluginManagement>
<plugins>
<!--This plugin's configuration is used to store Eclipse m2e settings
only. It has no influence on the Maven build itself. -->
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>net.alchim31.maven</groupId>
<artifactId>yuicompressor-maven-plugin</artifactId>
<versionRange>[1.0,)</versionRange>
<goals>
<goal>compress</goal>
<goal>jslint</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
3) Se non preferisci inquinare il tuo file pom con questi metadati, puoi salvarlo in un file XML esterno (opzione 3). Di seguito è riportato un file di mappatura di esempio che indica a m2e di ignorare gli obiettivi jslint
e compress
del plugin yuicompressor-maven
<?xml version="1.0" encoding="UTF-8"?>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>net.alchim31.maven</groupId>
<artifactId>yuicompressor-maven-plugin</artifactId>
<versionRange>[1.0,)</versionRange>
<goals>
<goal>compress</goal>
<goal>jslint</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore/>
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
4) Nel caso in cui non ti piaccia nessuna di queste 3 opzioni, puoi usare un connettore m2e (estensione) per il plugin maven, che a sua volta fornirà i metadati a m2e. È possibile visualizzare un esempio delle informazioni sui metadati all'interno di un connettore a questo collegamento . Avrai notato che i metadati si riferiscono a un configuratore. Ciò significa semplicemente che m2e delegherà la responsabilità a quella particolare classe java fornita dall'autore dell'estensione. Il configuratore può configurare il progetto (come aggiungere cartelle di origine aggiuntive, ecc.) E decidere se eseguire il plug-in Maven effettivo durante una build incrementale (se non gestito correttamente all'interno del configuratore, può portare a infinite build del progetto)
Fare riferimento a questi collegamenti per un esempio del configuratore ( link1 , link2 ). Quindi, nel caso in cui il plugin sia qualcosa che può essere gestito tramite un connettore esterno, puoi installarlo. m2e mantiene un elenco di tali connettori forniti da altri sviluppatori, noto come catalogo di scoperta. m2e ti chiederà di installare un connettore se non disponi già di metadati di mappatura del ciclo di vita per l'esecuzione tramite nessuna delle opzioni (1-6) e il catalogo di scoperta ha un'estensione che può gestire l'esecuzione.
L'immagine sotto mostra come m2e ti chiede di installare il connettore per il plugin build-helper-maven.
.
5) m2e incoraggia gli autori del plug-in a supportare la compilazione incrementale e fornire la mappatura del ciclo di vita all'interno del plug-in maven stesso, il che significherebbe che gli utenti non dovranno utilizzare alcun mapping o connettore del ciclo di vita aggiuntivo, alcuni autori di plug-in lo hanno già implementato
6) Per impostazione predefinita m2e contiene i metadati della mappatura del ciclo di vita per la maggior parte dei plugin comunemente usati come maven-compiler-plugin e molti altri.
Ora torniamo alla domanda: probabilmente puoi semplicemente fornire una mappatura del ciclo di vita ignora in 1, 2 o 3 per quell'obiettivo specifico che ti sta creando problemi.