Maven - POM

POM to skrót od Project Object Model. To podstawowa jednostka pracy w Maven. Jest to plik XML, który znajduje się w katalogu podstawowym projektu jako pom.xml.

POM zawiera informacje o projekcie i różne szczegóły konfiguracji używane przez Maven do tworzenia projektów.

POM zawiera również cele i wtyczki. Wykonując zadanie lub cel, Maven szuka POM w bieżącym katalogu. Odczytuje POM, pobiera potrzebne informacje konfiguracyjne, a następnie realizuje cel. Niektóre z konfiguracji, które można określić w POM, są następujące:

  • zależności projektu
  • plugins
  • goals
  • budować profile
  • wersja projektu
  • developers
  • Lista mailingowa

Przed utworzeniem POM najpierw powinniśmy zdecydować o projekcie group (groupId), jego name (artifactId) i jego wersja jako te atrybuty pomagają w unikalnej identyfikacji projektu w repozytorium.

Przykład POM

<project xmlns = "http://maven.apache.org/POM/4.0.0"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>

   <groupId>com.companyname.project-group</groupId>
   <artifactId>project</artifactId>
   <version>1.0</version>
</project>

Należy zauważyć, że dla każdego projektu powinien istnieć jeden plik POM.

  • Wszystkie pliki POM wymagają rozszerzenia project element i trzy obowiązkowe pola: groupId, artifactId, version.

  • Zapis projektów w repozytorium to groupId:artifactId:version.

  • Minimalne wymagania dla POM -

Sr.No. Węzeł i opis
1

Project root

To jest tag główny projektu. Musisz określić podstawowe ustawienia schematu, takie jak schemat Apache i specyfikacja w3.org.

2

Model version

Wersja modelu powinna być 4.0.0.

3

groupId

To jest identyfikator grupy projektu. Jest to na ogół unikalne w przypadku organizacji lub projektu. Na przykład grupa bankowa spółka.firma.bank ma wszystkie projekty związane z bankiem.

4

artifactId

To jest identyfikator projektu. To jest ogólnie nazwa projektu. Na przykład bankowość konsumencka. Wraz z groupId artifactId definiuje lokalizację artefaktu w repozytorium.

5

version

To jest wersja projektu. Wraz z groupId jest używany w repozytorium artefaktu, aby oddzielić od siebie wersje. Na przykład -

com.company.bank:consumer-banking:1.0

com.company.bank:consumer-banking:1.1.

Super POM

Super POM to domyślny POM Maven. Wszystkie POMs dziedziczą po rodzicu lub wartości domyślnej (pomimo wyraźnej definicji lub nie). Ten podstawowy POM jest znany jakoSuper POMi zawiera wartości dziedziczone domyślnie.

Maven używa efektywnego POM (konfiguracja z super pom plus konfiguracja projektu), aby zrealizować odpowiedni cel. Pomaga programistom określić minimalne szczegóły konfiguracji w jego / jej pom.xml. Chociaż konfiguracje można łatwo zastąpić.

Łatwym sposobem przyjrzenia się domyślnym konfiguracjom super POM jest uruchomienie następującego polecenia: mvn help:effective-pom

Stwórz plik pom.xml w dowolnym katalogu na swoim komputerze, wykorzystaj zawartość powyższego przykładowego pom.

W poniższym przykładzie utworzyliśmy pom.xml w folderze C: \ MVN \ project.

Teraz otwórz konsolę poleceń, przejdź do folderu zawierającego pom.xml i wykonaj następujące czynności mvn Komenda.

C:\MVN\project>mvn help:effective-pom

Maven rozpocznie przetwarzanie i wyświetli efektywny-pom.

[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'help'.
[INFO] ------------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.project-group:project-name:jar:1.0
[INFO]    task-segment: [help:effective-pom] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] [help:effective-pom {execution: default-cli}]
[INFO]

.....

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: < 1 second
[INFO] Finished at: Thu Jul 05 11:41:51 IST 2012
[INFO] Final Memory: 6M/15M
[INFO] ------------------------------------------------------------------------

Efektywny POM wyświetlany jako wynik w konsoli, po dziedziczeniu, interpolacji i profilach.

<?xml version="1.0" encoding="UTF-8"?>
<!-- ============================================== -->
<!-- -->
<!-- Generated by Maven Help Plugin on 2015-04-09T11:41:51 -->
<!-- See: http://maven.apache.org/plugins/maven-help-plugin/ -->
<!-- -->
<!-- ==============================================-->

<!-- ==============================================-->
<!-- -->
<!-- Effective POM for project -->
<!-- 'com.companyname.project-group:project-name:jar:1.0' -->
<!-- -->
<!-- ============================================== -->

<project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "http://www.w3.org/

2001/XMLSchema-instance" xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 

http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.companyname.project-group</groupId>
   <artifactId>project</artifactId>
   <version>1.0</version>
   <build>
      <sourceDirectory>C:\MVN\project\src\main\java</sourceDirectory>
      <scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>

      <testSourceDirectory>C:\MVN\project\src\test\java</testSourceDirectory>
      <outputDirectory>C:\MVN\project\target\classes</outputDirectory>
      <testOutputDirectory>C:\MVN\project\target\test-classes</testOutputDirectory>
      <resources>
         <resource>
            <mergeId>resource-0</mergeId>
            <directory>C:\MVN\project\src\main\resources</directory>
         </resource>
      </resources>
      <testResources>
         <testResource>
            <mergeId>resource-1</mergeId>
            <directory>C:\MVN\project\src\test\resources</directory>
         </testResource>
      </testResources>
      <directory>C:\MVN\project\target</directory>
      <finalName>project-1.0</finalName>
   
      <pluginManagement>
         <plugins>
            <plugin>
               <artifactId>maven-antrun-plugin</artifactId>
               <version>1.3</version>
            </plugin>
            <plugin>
               <artifactId>maven-assembly-plugin<  /artifactId>
               <version>2.2-beta-2</version>
            </plugin>
            <plugin>
               <artifactId>maven-clean-plugin<  /artifactId>
               <version>2.2</version>
            </plugin>
         
            <plugin>
               <artifactId>maven-compiler-plugin</artifactId>
               <version>2.0.2</version>
            </plugin>
            <plugin>
               <artifactId>maven-dependency-plugin</artifactId>     
               <version>2.0</version>
            </plugin>
            <plugin>
               <artifactId>maven-deploy-plugin</artifactId>
               <version>2.4</version>
            </plugin>
         
            <plugin>
               <artifactId>maven-ear-plugin</artifactId>
               <version>2.3.1</version>
            </plugin>
            <plugin>
               <artifactId>maven-ejb-plugin</artifactId>
               <version>2.1</version>
            </plugin>
            <plugin>
               <artifactId>maven-install-plugin</artifactId>
               <version>2.2</version>
            </plugin>
         
            <plugin>
               <artifactId>maven-jar-plugin</artifactId>
               <version>2.2</version>
            </plugin>
            <plugin>
               <artifactId>maven-javadoc-plugin</artifactId>
               <version>2.5</version>
            </plugin>
            <plugin>
               <artifactId>maven-plugin-plugin</artifactId>
               <version>2.4.3</version>
            </plugin>
         
            <plugin>
               <artifactId>maven-rar-plugin</artifactId>
               <version>2.2</version>
            </plugin>
            <plugin>
               <artifactId>maven-release-plugin</artifactId>
               <version>2.0-beta-8</version>
            </plugin>
            <plugin>
               <artifactId>maven-resources-plugin</artifactId>
               <version>2.3</version>
            </plugin>
         
            <plugin>
               <artifactId>maven-site-plugin</artifactId>
               <version>2.0-beta-7</version>
            </plugin>
            <plugin>
               <artifactId>maven-source-plugin</artifactId>
               <version>2.0.4</version>
            </plugin>
            <plugin>
               <artifactId>maven-surefire-plugin</artifactId>
               <version>2.4.3</version>
            </plugin>
            <plugin>
               <artifactId>maven-war-plugin</artifactId>
               <version>2.1-alpha-2</version>
            </plugin>
         </plugins>
      </pluginManagement>
   
      <plugins>
         <plugin>
            <artifactId>maven-help-plugin</artifactId>
            <version>2.1.1</version>
         </plugin>
      </plugins>
   </build>
   
   <repositories>
      <repository>
         <snapshots>
            <enabled>false</enabled>
         </snapshots>
         <id>central</id>
         <name>Maven Repository Switchboard</name>
         <url>http://repo1.maven.org/maven2</url>
      </repository>
   </repositories>
   <pluginRepositories>
      <pluginRepository>
         <releases>
            <updatePolicy>never</updatePolicy>
         </releases>
         <snapshots>
            <enabled>false</enabled>
         </snapshots>
         <id>central</id>
         <name>Maven Plugin Repository</name>
         <url>http://repo1.maven.org/maven2</url>
      </pluginRepository>
   </pluginRepositories>
   <reporting>
      <outputDirectory>C:\MVN\project\target/site</outputDirectory>
   </reporting>
</project>

W powyższym pom.xml możesz zobaczyć domyślną strukturę folderów źródłowych projektu, katalog wyjściowy, wymagane wtyczki, repozytoria, katalog raportowania, którego Maven będzie używał podczas wykonywania pożądanych celów.

Maven pom.xml również nie musi być napisany ręcznie. Maven dostarcza liczne wtyczki archetypów do tworzenia projektów, które w kolejności tworzą strukturę projektu i pom.xml