2013-06-04 10 views
14

Próbowałem wygenerować skuteczne pom na przykładowej aplikacji za pomocą pomocy mvn: effective-pom command. http://books.sonatype.com/mvnref-book/reference/pom-relationships-sect-pom.html w tym artykule mówi, że skuteczny pom to połączenie pom pom i aplikacji pom.Skutecznie pom pomieszać między super pom i aplikacji POM

Ale, gdy patrzę na moją efektywną pom, zawiera elementy, które nie są zawarte ani w super-pom ani w skutecznej pom.

Czy istnieje inny czynnik decydujący o tym, co wchodzi w efektywną pom.

Podana poniżej jest super-pom i aplikacja pom, obie te pom nie zawierają mavne-jar-plugin lub maven-compiler-plugin, ale w moim ef-pom mogę zobaczyć te wtyczki w sekcji build. Jak to się robi?

Dzięki z góry za wszelką pomoc w wyjaśnieniu tej kwestii

Super POM

<!-- 
Licensed to the Apache Software Foundation (ASF) under one 
or more contributor license agreements. See the NOTICE file 
distributed with this work for additional information 
regarding copyright ownership. The ASF licenses this file 
to you under the Apache License, Version 2.0 (the 
"License"); you may not use this file except in compliance 
with the License. You may obtain a copy of the License at 

    http://www.apache.org/licenses/LICENSE-2.0 

Unless required by applicable law or agreed to in writing, 
software distributed under the License is distributed on an 
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
KIND, either express or implied. See the License for the 
specific language governing permissions and limitations 
under the License. 
--> 

<!-- START SNIPPET: superpom --> 
<project> 
    <modelVersion>4.0.0</modelVersion> 

    <repositories> 
    <repository> 
     <id>central</id> 
     <name>Central Repository</name> 
     <url>http://repo.maven.apache.org/maven2</url> 
     <layout>default</layout> 
     <snapshots> 
     <enabled>false</enabled> 
     </snapshots> 
    </repository> 
    </repositories> 

    <pluginRepositories> 
    <pluginRepository> 
     <id>central</id> 
     <name>Central Repository</name> 
     <url>http://repo.maven.apache.org/maven2</url> 
     <layout>default</layout> 
     <snapshots> 
     <enabled>false</enabled> 
     </snapshots> 
     <releases> 
     <updatePolicy>never</updatePolicy> 
     </releases> 
    </pluginRepository> 
    </pluginRepositories> 

    <build> 
    <directory>${project.basedir}/target</directory> 
    <outputDirectory>${project.build.directory}/classes</outputDirectory> 
    <finalName>${project.artifactId}-${project.version}</finalName> 
    <testOutputDirectory>${project.build.directory}/test-classes</testOutputDirectory> 
    <sourceDirectory>${project.basedir}/src/main/java</sourceDirectory> 
    <scriptSourceDirectory>src/main/scripts</scriptSourceDirectory> 
    <testSourceDirectory>${project.basedir}/src/test/java</testSourceDirectory> 
    <resources> 
     <resource> 
     <directory>${project.basedir}/src/main/resources</directory> 
     </resource> 
    </resources> 
    <testResources> 
     <testResource> 
     <directory>${project.basedir}/src/test/resources</directory> 
     </testResource> 
    </testResources> 
    <pluginManagement> 
     <!-- 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) --> 
     <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> 
    </build> 

    <reporting> 
    <outputDirectory>${project.build.directory}/site</outputDirectory> 
    </reporting> 

    <profiles> 
    <!-- NOTE: The release profile will be removed from future versions of the super POM --> 
    <profile> 
     <id>release-profile</id> 

     <activation> 
     <property> 
      <name>performRelease</name> 
      <value>true</value> 
     </property> 
     </activation> 

     <build> 
     <plugins> 
      <plugin> 
      <inherited>true</inherited> 
      <artifactId>maven-source-plugin</artifactId> 
      <executions> 
       <execution> 
       <id>attach-sources</id> 
       <goals> 
        <goal>jar</goal> 
       </goals> 
       </execution> 
      </executions> 
      </plugin> 
      <plugin> 
      <inherited>true</inherited> 
      <artifactId>maven-javadoc-plugin</artifactId> 
      <executions> 
       <execution> 
       <id>attach-javadocs</id> 
       <goals> 
        <goal>jar</goal> 
       </goals> 
       </execution> 
      </executions> 
      </plugin> 
      <plugin> 
      <inherited>true</inherited> 
      <artifactId>maven-deploy-plugin</artifactId> 
      <configuration> 
       <updateReleaseInfo>true</updateReleaseInfo> 
      </configuration> 
      </plugin> 
     </plugins> 
     </build> 
    </profile> 
    </profiles> 

</project> 
<!-- END SNIPPET: superpom --> 

Zastosowanie POM

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>org.sonatype.mavenbook.ch08</groupId> 
    <artifactId>simplest-project</artifactId> 
    <packaging>jar</packaging> 
    <version>1</version> 
</project> 

skuteczne pom

+1

Przypuszczam, że zapomniałeś dodać efektywną pom. – Utku

Odpowiedz

20

Efektywny POM składa się z POM/Aplikacji Super POM + zawartości settings.xml + wtyczek związanych z cyklem życia domyślnie w oparciu o wybrany typ opakowania (czyli na podstawie jednego elementu w Aplikacyjnym POM).

Zapytałeś o maven-jar-plugin i maven-compiler-plugin. Są one domyślnie powiązane z cyklem życia, ponieważ aplikacja POM określa opakowanie na jar.

Możesz zobaczyć domyślne powiązania w $YOUR_REPO_LOCATION\org\apache\maven\maven-core\3.0.x\maven-core-3.0.x.jar\META-INF\plexus\components.xml lub w documentation.

+1

Dziękuję za tę odpowiedź, Jeszcze jedno pytanie do wyjaśnienia, Więc maven będzie działał na efektywnej pom podczas realizacji domyślnego cyklu życia, prawda mam rację ? – KItis

+3

Maven tworzy efektywną pom, a następnie używa jej podczas wykonywania dowolnego polecenia, niezależnie od tego, czy jest to faza cyklu życia (na przykład 'mvn install') czy określony cel (np.' Wersje mvn: update-dependency-updates'). – user944849

+0

@ user944849 Nawiasem mówiąc, moje 'maven-core-3.0.3.jar' nie znajdowało się w moim lokalnym repozytorium, ale w' $ (MAVEN_HOME)/lib/maven-core-3.0.3.jar'. Jaki może być tego powód? – Utku

3

Jeśli dobrze pamiętam, skutecznych środków POM rzeczywisty POM, który ma zostać użyty.

Włączenie ustawień w super POM jest jego częścią. Obejmuje on także wiele innych rzeczy, takich jak stosowanie nadrzędnego POM, stosowanie profili, zastępowanie właściwości itp.

Myślę, że lepiej będzie, jeśli podasz fragment ustawień, które według ciebie pochodzi z żadnego miejsca, więc że możemy określić, skąd pochodzą.

+0

Mam zaktualizowane pytanie za pomocą Super POM, aplikacji pom i nowych funkcji w efektywnym pom – KItis

Powiązane problemy