Social Icons

.

воскресенье, 8 декабря 2013 г.

Apache MAVEN Project - pom.xml


Что такое pom.xml

pom.xml - это основной файл который описывает проект. Вообще могут быть дополнительные файлы, но они играют второстепенную роль.
Давайте резберём из чего состоит файл pom.xml



Корневой элемент и заголовок.


           

<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>

  .............

</project>

  

Корневой элемент <project>, схема, которая облегчает редактирование и проверку, и версия POM.
Внутри тэга project содержится основная и обязательная информация о проекте:


  <!-- The Basics -->

  <groupId>...</groupId>

  <artifactId>...</artifactId>

  <version>...</version>



В Maven каждый проект идентифицируется парой groupId artifactId. Во избежание конфликта имён, groupId - наименование организации или подразделения и обычно действуют такие же правила как и при именовании пакетов в Java - записывают доменное имя организации или сайта проекта. artifactId - название проекта. Внутри тэга version, как можно догадаться хранится версия проекта. Тройкой groupId, artifactId, version(далее - GAV) можно однозначно идентифицировать jar файл приложения или библиотеки. Если состояние кода для проекта не зафиксировано, то в конце к имени версии добавляется "-SNAPSHOT" что обозначает что версия в разработке и результирующий jar файл может меняться. <packaging>...</packaging> определяет какого типа файл будет создаваться как результат сборки. Возможные варианты pom, jar, war, ear

Давайте лучше рассмотрим на примере проекта powermock-core groupId - org.powermock, artifactId - powermock-core , version - 1.4.6

Также добавляется информация, которая не используется самим мавеном, но нужна для программиста, чтобы понять, о чём этот проект:

    <name>powermock-core</name> название проекта для человека
    <description>PowerMock core functionality.</description> Описание проекта
    <url>http://www.powermock.org</url> сайт проекта.

Зависимости


Зависимости - следующая очень важная часть pom.xml - тут хранится список всех библиотек (зависимостей) которые используюся в проекте. Каждая библиотека идентифицируется также как и сам проект - тройкой groupId, artifactId, version (GAV). Объявление зависимостей заключено в тэг <dependencies>...</dependencies>.


    <dependencies>

        <dependency>

            <groupId>junit</groupId>

            <artifactId>junit</artifactId>

            <version>4.4</version>

            <scope>test</scope>

        </dependency>

        <dependency>

            <groupId>org.powermock</groupId>

            <artifactId>powermock-reflect</artifactId>

            <version>${version}</version>

        </dependency>

        <dependency>

            <groupId>org.javassist</groupId>

            <artifactId>javassist</artifactId>

            <version>3.13.0-GA</version>

            <scope>compile</scope>

        </dependency>

    </dependencies>

Как вы могли заметить, кроме GAV при описании зависимости может присутствовать тэг <scope>. Scope задаёт для чего библиотека используется. В данном примере говорится, что библиотека с GAV junit:junit:4.4 нужна только для выполнения тестов.

Тэг <build>


Тэг <build> не обязательный т. к. существуют значения по умолчанию. Этот раздел содержит информацию по самой сборке: где находятся исходные файлы, где ресурсы, какие плагины используются. Например:

         <build>

         <sourceDirectory>src/java</sourceDirectory>

            <resources>

                <resource>

                    <directory>${basedir}/src/java</directory>

                    <includes>

                    <include>**/*.properties</include>

                    </includes>

                </resource>

            </resources>

                 <plugins>

                     <plugin>

                         <groupId>org.apache.maven.plugins</groupId>

                         <artifactId>maven-pmd-plugin</artifactId>

                         <version>2.4</version>

                     </plugin>

                 </plugins>

             </build>

                    

Давайте рассмотрим этот пример более подробно.

    <sourceDirectory> определяет, откуда maven будет брать файлы исходного кода. По умолчанию это src/main/java, но вы можете определить, где это вам удобно. Директория может быть только одна (без использования специальных плагинов)
    <resources> и вложенные в неё тэги <resource> определяют, одну или несколько директорий, где хранятся файлы ресурсов. Ресурсы в отличии от файлов исходного кода при сборке просто копируются . Директория по умолчанию src/main/resources
    <outputDirectory> определяет, в какую директорию компилятор будет сохранять результаты компиляции - *.class файлы. Значение по умолчанию - target/classes
    <finalName> - имя результирующего jar (war, ear..) файла с соответствующим типу расширением, который создаётся на фазе package. Значение по умолчанию — artifactId-version.

Оригинал 

Комментариев нет:

Отправить комментарий

 

Так говорил Учитель:

У хорошо написанной программы есть свой собственный рай, у плохо написанной — свой собственный ад.

Russian Developer

Взгляд его светел, усилия праведны, старания бесплодны, дело безнадежно ...