2016-03-21 16 views
1

Ich benutze Eclipse Kepler mit M2E. Ich habe ein leeres Eclipse-Projekt erstellt, das direkt in ein Maven-Projekt konvertiert wurde. Die pom.xml wird bereinigt: keine Abhängigkeit oder Build-Abschnitt, kein Eltern-POM. Die Maven settings.xml ist die Standardeinstellung: keine Informationen enthalten.Was bestimmt die Maven Plugins Versionen im <build> Abschnitt von pom.xml?

Wenn die Anhörung der Effective POM dank M2E, sind viele Plugins vorhanden:

<?xml version="1.0"?> 
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>testTCO</groupId> 
    <artifactId>testTCO</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <repositories> 
    <repository> 
     <snapshots> 
     <enabled>false</enabled> 
     </snapshots> 
     <id>central</id> 
     <name>Central Repository</name> 
     <url>http://repo.maven.apache.org/maven2</url> 
    </repository> 
    </repositories> 
    <pluginRepositories> 
    <pluginRepository> 
     <releases> 
     <updatePolicy>never</updatePolicy> 
     </releases> 
     <snapshots> 
     <enabled>false</enabled> 
     </snapshots> 
     <id>central</id> 
     <name>Central Repository</name> 
     <url>http://repo.maven.apache.org/maven2</url> 
    </pluginRepository> 
    </pluginRepositories> 
    <build> 
    <sourceDirectory>C:\stuff\eclipse-jee-kepler_64\workspace\wosp\testTCO\src\main\java</sourceDirectory> 
    <scriptSourceDirectory>C:\stuff\eclipse-jee-kepler_64\workspace\wosp\testTCO\src\main\scripts</scriptSourceDirectory> 
    <testSourceDirectory>C:\stuff\eclipse-jee-kepler_64\workspace\wosp\testTCO\src\test\java</testSourceDirectory> 
    <outputDirectory>C:\stuff\eclipse-jee-kepler_64\workspace\wosp\testTCO\target\classes</outputDirectory> 
    <testOutputDirectory>C:\stuff\eclipse-jee-kepler_64\workspace\wosp\testTCO\target\test-classes</testOutputDirectory> 
    <resources> 
     <resource> 
     <directory>C:\stuff\eclipse-jee-kepler_64\workspace\wosp\testTCO\src\main\resources</directory> 
     </resource> 
    </resources> 
    <testResources> 
     <testResource> 
     <directory>C:\stuff\eclipse-jee-kepler_64\workspace\wosp\testTCO\src\test\resources</directory> 
     </testResource> 
    </testResources> 
    <directory>C:\stuff\eclipse-jee-kepler_64\workspace\wosp\testTCO\target</directory> 
    <finalName>testTCO-0.0.1-SNAPSHOT</finalName> 
    <pluginManagement> 
     <plugins> 
     <plugin> 
      <artifactId>maven-antrun-plugin</artifactId> 
      <version>1.3</version> 
     </plugin> 
     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>2.2-beta-5</version> 
     </plugin> 
     <plugin> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <version>2.1</version> 
     </plugin> 
     <plugin> 
      <artifactId>maven-release-plugin</artifactId> 
      <version>2.0</version> 
     </plugin> 
     </plugins> 
    </pluginManagement> 
    <plugins> 
     <plugin> 
     <artifactId>maven-clean-plugin</artifactId> 
     <version>2.4.1</version> 
     <executions> 
      <execution> 
      <id>default-clean</id> 
      <phase>clean</phase> 
      <goals> 
       <goal>clean</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin> 
     <plugin> 
     <artifactId>maven-resources-plugin</artifactId> 
     <version>2.5</version> 
     <executions> 
      <execution> 
      <id>default-testResources</id> 
      <phase>process-test-resources</phase> 
      <goals> 
       <goal>testResources</goal> 
      </goals> 
      </execution> 
      <execution> 
      <id>default-resources</id> 
      <phase>process-resources</phase> 
      <goals> 
       <goal>resources</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin> 
     <plugin> 
     <artifactId>maven-jar-plugin</artifactId> 
     <version>2.3.2</version> 
     <executions> 
      <execution> 
      <id>default-jar</id> 
      <phase>package</phase> 
      <goals> 
       <goal>jar</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin> 
     <plugin> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>2.3.2</version> 
     <executions> 
      <execution> 
      <id>default-compile</id> 
      <phase>compile</phase> 
      <goals> 
       <goal>compile</goal> 
      </goals> 
      </execution> 
      <execution> 
      <id>default-testCompile</id> 
      <phase>test-compile</phase> 
      <goals> 
       <goal>testCompile</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin> 
     <plugin> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <version>2.10</version> 
     <executions> 
      <execution> 
      <id>default-test</id> 
      <phase>test</phase> 
      <goals> 
       <goal>test</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin> 
     <plugin> 
     <artifactId>maven-install-plugin</artifactId> 
     <version>2.3.1</version> 
     <executions> 
      <execution> 
      <id>default-install</id> 
      <phase>install</phase> 
      <goals> 
       <goal>install</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin> 
     <plugin> 
     <artifactId>maven-deploy-plugin</artifactId> 
     <version>2.7</version> 
     <executions> 
      <execution> 
      <id>default-deploy</id> 
      <phase>deploy</phase> 
      <goals> 
       <goal>deploy</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin> 
     <plugin> 
     <artifactId>maven-site-plugin</artifactId> 
     <version>3.0</version> 
     <executions> 
      <execution> 
      <id>default-site</id> 
      <phase>site</phase> 
      <goals> 
       <goal>site</goal> 
      </goals> 
      <configuration> 
       <outputDirectory>C:\stuff\eclipse-jee-kepler_64\workspace\wosp\testTCO\target\site</outputDirectory> 
       <reportPlugins> 
       <reportPlugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-project-info-reports-plugin</artifactId> 
       </reportPlugin> 
       </reportPlugins> 
      </configuration> 
      </execution> 
      <execution> 
      <id>default-deploy</id> 
      <phase>site-deploy</phase> 
      <goals> 
       <goal>deploy</goal> 
      </goals> 
      <configuration> 
       <outputDirectory>C:\stuff\eclipse-jee-kepler_64\workspace\wosp\testTCO\target\site</outputDirectory> 
       <reportPlugins> 
       <reportPlugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-project-info-reports-plugin</artifactId> 
       </reportPlugin> 
       </reportPlugins> 
      </configuration> 
      </execution> 
     </executions> 
     <configuration> 
      <outputDirectory>C:\stuff\eclipse-jee-kepler_64\workspace\wosp\testTCO\target\site</outputDirectory> 
      <reportPlugins> 
      <reportPlugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-project-info-reports-plugin</artifactId> 
      </reportPlugin> 
      </reportPlugins> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
    <reporting> 
    <outputDirectory>C:\stuff\eclipse-jee-kepler_64\workspace\wosp\testTCO\target\site</outputDirectory> 
    </reporting> 
</project> 

Zum Beispiel die Version 2.5 des Plug-ins Maven-Ressourcen-Plugin geladen wird. Warum diese Version und nicht eine neuere?

Ich weiß, dass ich dies überschreiben kann, indem Sie das Plugin und die erforderliche Version in der pom.xml angeben, aber ich würde gerne wissen, wie diese Standardversion Werte geladen werden.

Das Super POM enthält einen Teil des Inhalts des effektiven POM, aber die meisten Plugins scheinen aus dem Nichts zu kommen.

Antwort

3

Dies ist eine Kombination aus Super POM und Maven default bindings.

Das Super POM ist ein spezielles POM, von dem alle POM implizit erben. Es definiert verschiedene Standardeigenschaften, die alle Maven-Projekte teilen. Es wird auch verwendet, um Plugin-Versionen für die am häufigsten verwendeten Plugins zu reparieren. Für Maven 3.3.9 definiert dieses POM nur diese Versionen.

<plugin> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.3</version> 
</plugin> 
<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.2-beta-5</version> 
</plugin> 
<plugin> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <version>2.8</version> 
</plugin> 
<plugin> 
    <artifactId>maven-release-plugin</artifactId> 
    <version>2.3.2</version> 
</plugin> 

Aber beachten Sie den Kommentar in dieser:

<!-- NOTE: These plugins will be removed from future versions of the super POM --> 
<!-- They are kept for the moment as they are very unlikely to conflict with lifecycle mappings (MNG-4453) --> 

die MNG-4453 zum Maven Frage verknüpft. Heutzutage sind Plugin-Versionen innerhalb von Standard-Bindungen für einen bestimmten Lebenszyklus definiert und es ist wahrscheinlich, dass das, was derzeit im Super POM vorhanden ist, entfernt wird.

Diese Bindungen können in der META-INF/plexus/default-bindings.xml Datei gefunden werden. Als Referenz ist das, was es für die jar Verpackung sieht:

<phases> 
    <process-resources> 
    org.apache.maven.plugins:maven-resources-plugin:2.6:resources 
    </process-resources> 
    <compile> 
    org.apache.maven.plugins:maven-compiler-plugin:2.5.1:compile 
    </compile> 
    <process-test-resources> 
    org.apache.maven.plugins:maven-resources-plugin:2.6:testResources 
    </process-test-resources> 
    <test-compile> 
    org.apache.maven.plugins:maven-compiler-plugin:2.5.1:testCompile 
    </test-compile> 
    <test> 
    org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test 
    </test> 
    <package> 
    org.apache.maven.plugins:maven-jar-plugin:2.4:jar 
    </package> 
    <install> 
    org.apache.maven.plugins:maven-install-plugin:2.4:install 
    </install> 
    <deploy> 
    org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy 
    </deploy> 
</phases> 

Standard-Version von Plugins sind gebunden an eine bestimmte Phase der Verpackung und Build wird von den erben.

1

Die super pom defines einige Teile (Ordnerstruktur) aber die life cycle binding definiert andere Teile wie die Bindung an die entsprechenden Lebenszyklusphasen. The life cycle phases itself are defined here. Die Versionen der Plugins hängen davon ab, welche Version von Maven Sie verwenden, weil die Lebenszyklusbindung aktualisiert wird. Wenn Sie sicher sein wollen, welche Version eines Plugins verwendet wird, sollten Sie alle Plugins, die Sie verwenden, über pluginManagement in Ihrem Pom definieren. Dies sollte in einer Pom-Datei des Unternehmens geschehen, um Doppelarbeit zu vermeiden.