Eclipse hat das Konzept der inkrementellen Builds. Dies ist unglaublich nützlich, da es viel Zeit spart.
Wie ist das nützlich?
Angenommen, Sie haben gerade eine einzelne Java-Datei geändert. Die inkrementellen Builder können den Code kompilieren, ohne alles neu kompilieren zu müssen (was mehr Zeit in Anspruch nimmt).
Was ist nun das Problem mit Maven Plugins?
Die meisten Maven-Plugins sind nicht für inkrementelle Builds konzipiert und verursachen daher Probleme für m2e. m2e weiß nicht, ob das Plugin-Ziel entscheidend ist oder ob es irrelevant ist. Wenn nur jedes Plugin ausgeführt wird, wenn sich eine einzelne Datei ändert, wird es viel Zeit in Anspruch nehmen.
Aus diesem Grund stützt sich m2e auf Metadateninformationen, um herauszufinden, wie die Ausführung behandelt werden soll. m2e hat verschiedene Optionen für die Bereitstellung dieser Metadateninformationen entwickelt. Die Reihenfolge der Einstellungen ist wie folgt (höchste bis niedrigste).
- pom.xml Datei des Projekts
- Eltern-, Großeltern- und so weiter pom.xml-Dateien
- [m2e 1.2+] Arbeitsbereichseinstellungen
- installierte m2e-Erweiterungen
- [m2e 1.1+] Lebenszyklus-Mapping-Metadaten, die vom Maven-Plugin bereitgestellt werden
- Standard-Metadaten für die Lebenszykluszuordnung, die mit m2e geliefert werden
1,2 bezieht sich auf die Angabe des Abschnitts pluginManagement im Tag Ihrer POM-Datei oder eines ihrer Eltern. M2E liest diese Konfiguration, um das Projekt zu konfigurieren. Das folgende Snippet weist m2e an, die jslint
und compress
Ziele des yuicompressor-maven-Plugins zu ignorieren
<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) Falls Sie es nicht vorziehen, Ihre POM-Datei mit diesen Metadaten zu verschmutzen, können Sie diese in einer externen XML-Datei speichern (Option 3). Unten finden Sie eine Beispiel-Mapping-Datei, die m2e anweist, die jslint
und compress
Ziele des yuicompressor-maven-Plugins zu ignorieren
<?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) Falls Ihnen eine dieser 3 Optionen nicht gefällt, können Sie einen m2e-Connector (Erweiterung) für das Maven-Plugin verwenden. Der Connector stellt wiederum die Metadaten für m2e bereit. Unter diesem Link sehen Sie ein Beispiel für die Metadateninformationen in einem Connector . Möglicherweise haben Sie bemerkt, dass sich die Metadaten auf einen Konfigurator beziehen. Dies bedeutet einfach, dass m2e die Verantwortung an diese bestimmte Java-Klasse delegiert, die vom Erweiterungsautor bereitgestellt wird. Der Konfigurator kann das Projekt konfigurieren (z. B. zusätzliche Quellordner hinzufügen usw.) und entscheiden, ob das eigentliche Maven-Plugin während eines inkrementellen Builds ausgeführt werden soll (falls) Wird der Konfigurator nicht ordnungsgemäß verwaltet, kann dies zu endlosen Projektbuilds führen.
Unter diesen Links finden Sie ein Beispiel für die Konfiguration ( Link1 , Link2 ). Wenn das Plugin also über einen externen Anschluss verwaltet werden kann, können Sie es installieren. m2e führt eine Liste solcher Konnektoren, die von anderen Entwicklern bereitgestellt wurden. Dies wird als Erkennungskatalog bezeichnet. m2e fordert Sie auf, einen Connector zu installieren, wenn Sie noch keine Metadaten für die Lebenszykluszuordnung für die Ausführung über eine der Optionen (1-6) haben und der Erkennungskatalog über eine Erweiterung verfügt, mit der die Ausführung verwaltet werden kann.
Das folgende Bild zeigt, wie m2e Sie auffordert, den Connector für das Build-Helper-Maven-Plugin zu installieren.
.
5) m2e ermutigt die Plugin-Autoren, die inkrementelle Erstellung und Bereitstellung von Lifecycle-Mappings innerhalb des Maven-Plugins selbst zu unterstützen. Dies würde bedeuten, dass Benutzer keine zusätzlichen Lifecycle-Mappings oder Connectors verwenden müssen. Einige Plugin-Autoren haben dies bereits implementiert
6) Standardmäßig enthält m2e die Metadaten für die Lebenszykluszuordnung für die meisten häufig verwendeten Plugins wie das Maven-Compiler-Plugin und viele andere.
Zurück zur Frage: Sie können wahrscheinlich einfach eine Ignorier-Lebenszykluszuordnung in 1, 2 oder 3 für das spezifische Ziel bereitstellen, das Ihnen Probleme bereitet.