Eclipse ma koncepcję kompilacji przyrostowych, co jest niezwykle przydatne, ponieważ pozwala zaoszczędzić dużo czasu.
Jak to jest przydatne
Powiedzmy, że zmieniłeś jeden plik .java. Twórcy przyrostu będą mogli skompilować kod bez konieczności ponownej kompilacji wszystkiego (co zajmie więcej czasu).
Jaki jest problem z wtyczkami Maven
Większość wtyczek maven nie jest przeznaczona do kompilacji przyrostowych i dlatego stwarza problemy dla m2e. m2e nie wie, czy celem wtyczki jest coś kluczowego, czy też nieistotnego. Jeśli po prostu uruchomi każdą wtyczkę, gdy zmieni się pojedynczy plik, zajmie to dużo czasu.
To jest powód, dla którego m2e polega na informacjach z metadanych, aby dowiedzieć się, jak powinno być obsługiwane wykonanie. m2e wymyślił różne opcje dostarczania tych informacji metadanych, a kolejność preferencji jest jak poniżej (od najwyższej do najniższej)
- plik pom.xml projektu
- rodzic, dziadek i tak dalej pliki pom.xml
- Preferencje obszaru roboczego [m2e 1.2+]
- zainstalowane rozszerzenia m2e
- [m2e 1.1+] metadane mapowania cyklu życia dostarczane przez wtyczkę maven
- domyślne metadane mapowania cyklu życia dostarczane z m2e
1,2 odnosi się do określenia sekcji pluginManagement w tagu twojego pliku pom lub któregokolwiek z jego rodziców. M2E odczytuje tę konfigurację, aby skonfigurować projekt. Poniżej fragment kodu instruuje m2e, aby ignorował cele jslint
i compress
wtyczki 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) Jeśli nie chcesz zanieczyszczać swojego pliku pom tymi metadanymi, możesz zapisać je w zewnętrznym pliku XML (opcja 3). Poniżej znajduje się przykładowy plik mapowania, który instruuje m2e, aby ignorował cele jslint
i compress
wtyczki 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) Jeśli nie podoba ci się żadna z tych 3 opcji, możesz użyć złącza m2e (rozszerzenia) dla wtyczki maven, które z kolei dostarczy metadane do m2e. Możesz zobaczyć przykład informacji metadanych w łączniku pod tym linkiem . Być może zauważyłeś, że metadane odnoszą się do konfiguratora. Oznacza to po prostu, że m2e przeleje odpowiedzialność na tę konkretną klasę java dostarczoną przez autora rozszerzenia. Konfigurator może skonfigurować projekt (np. Dodać dodatkowe foldery źródłowe itp.) I zdecydować, czy wykonać właściwą wtyczkę maven podczas kompilacji przyrostowej (jeśli nieprawidłowo zarządzany w konfiguratorze, może prowadzić do niekończących się kompilacji projektów)
Skorzystaj z tych łączy, aby zapoznać się z przykładem konfiguracji ( łącze1 , łącze2 ). Jeśli więc wtyczka jest czymś, czym można zarządzać za pomocą zewnętrznego złącza, możesz ją zainstalować. m2e utrzymuje listę takich łączników dostarczoną przez innych programistów, znaną jako katalog wykrywania. m2e wyświetli monit o zainstalowanie łącznika, jeśli nie masz jeszcze żadnych metadanych mapowania cyklu życia do wykonania za pomocą dowolnej z opcji (1-6), a katalog wykrywania ma rozszerzenie, które może zarządzać wykonaniem.
Poniższy obraz pokazuje, jak m2e monituje o zainstalowanie łącznika dla wtyczki build-helper-maven-plugin.
.
5) m2e zachęca autorów wtyczek do obsługi przyrostowej kompilacji i mapowania cyklu życia dostaw w samej wtyczce maven, co oznaczałoby, że użytkownicy nie będą musieli używać żadnych dodatkowych mapowań cyklu życia ani łączników. Niektórzy autorzy wtyczek już to zaimplementowali
6) Domyślnie m2e przechowuje metadane mapowania cyklu życia dla większości powszechnie używanych wtyczek, takich jak maven-compiler-plugin i wiele innych.
Wróćmy teraz do pytania: prawdopodobnie możesz po prostu podać mapowanie cyklu życia zignorowania w 1, 2 lub 3 dla tego konkretnego celu, który sprawia ci kłopoty.