MAVEN

Maven - сборщик проектов.
POM - project object model.
Все pom наследуются от супер pom.

Super (родительский) pom имеет такие настройки:

  • удаленный репозиторий для плагинов и зависимостей,
  • настройки build (test, resource, main...),
  • плагины ( maven install, clean, ear, ejb ...).
Простейший пример pom.xml.
<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.sonatype.mavenbook.ch08</groupId>
    <artifactId>simplest-project</artifactId>
    <version>1</version>
</project>

<version>1.0-SNAPSHOT</version> maven это читает как 1.0-20080207-230803-1, если бы этот пом задеплоен в 11:08 PM on February 7th, 2008 UTC.

Dependencies
  • internal - от других модулей проекта.
  • external - внешние библиотеки.
Dependency scopes
  • compile - дефолтный скоуп, используется при компиляции и выполнении. Упаковуется.
  • provided - зависимость поставляеться контейнером или JDK. Ипользуется при компиляции, но не при выполнении. Не упаковуется. Например, servlet-API, которое поставляеться сервером приложений.
  • runtime - используеться только при выполнении. Упаковуется. Например, JDBC driver.
  • test - используется в тестах (компиляция и выполнение).
  • system - как provided, только путь к файлам нужно указывать явно в локальной файловой системе. Не рекоммендуется использовать.
<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.2</version>
                <scope>runtime</scope>
            </dependency>
            ...
            <dependencies>
    </dependencyManagement>
DependecyManagement используется в parent pom, таким образом в child pom не указывается скоуп и версия.
Сочетание groupId  и artifacId должно быть уникальным.