Вакансия: младший Java программист
Небольшой компании разработчику ПО
требуется младший Java программист
Москва, м. Партизанская/ МЦК Окружная подробнее






Клуб Java разработчиков
Обсуждение интересных технологий
и новинок для Java разработчиков.
Москва, м. Партизанская подробнее






Наследование

Наследование позволяет избавиться от дублирования описаний.

Давайте рассмотрим как использовать наследование при описании maven проектов. Предположим, что у нас несколько проектов и в каждом мы используем библиотеку log4j для логгирования приложения.

Сначала создадим проект-предок. Весь проект-предок будет состоять из одного файла 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>
                          <groupId>ru.apache-maven</groupId>
                          <artifactId>parent</artifactId>
                          <version>1.0-SNAPSHOT</version>
                        <packaging>pom</packaging>
                  </project>
                
                
как вы заметили тэг packaging содержит значение pom. Теперь давайте внутри что-нибудь объявим. Например добавим
                <dependencies>
                <dependency>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                    <version>1.2.16</version>
                </dependency
                
                
и установим в локальный репозиторий:
                cd  parent
                mvn install.
                
Если посмотреть список зависимостей, то он будет такой:
                $ mvn dependency:tree
                     \- log4j:log4j:jar:1.2.16:compile
                

Теперь можно создать один или несколько проектов-потомков:

                <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>ru.apache_maven</groupId>-->
                <artifactId>testproj1</artifactId>
                <!--<version>1.0-SNAPSHOT</version>-->
                <parent>
                    <groupId>ru.apache_maven</groupId>
                    <artifactId>parent</artifactId>
                    <version>1.0-SNAPSHOT</version>
                </parent>
                <packaging>jar</packaging>

                <dependencies>
                </dependencies>
            </project>
            
                
Как видно в примере, мы объявили первое на что стоит обратить внимание — это то что groupId и version закомментированы. Они теперь необязательны и берутся по умолчанию такие же как и у parent проекта, хотя можно задать значения и отличные от тех которые по умолчанию. Второе и самое важное, если посмотреть список зависимойстей
                    $ mvn dependency:tree
                    \- log4j:log4j:jar:1.2.16:compile
                
то можно увидеть log4j, хотя мы в pom.xml проекта мы log4j не объявляли. Он унаследовался от проекта-предка.

Кроме зависимостей в проекте-предке часто объявляют плагины:

  • maven-compiler-plugin нужен в каждом проекте!
  • properties
  • репозитории
см. также секцию <dependencyManagement>






blog comments powered by Disqus