#java #eclipse #maven #dependencies
#java #eclipse #maven #зависимости
Вопрос:
Я борюсь с зависимостями maven. Иерархия зависимостей maven не разрешена в моих проектах, куда я добавляю свой пользовательский jar сборки. Это немного сбивает с толку, потому что все зависимости других внешних зависимостей (таких как org.json, reasteasy-jaxrs ) хорошо показаны в представлении иерархии зависимостей.Я использую Eclipse EE IDE для веб-разработчиков с плагином maven.
Структура проекта: Проект представляет собой платформу, состоящую из нескольких сервисов, использующих один и тот же модуль поддержки проекта. Кроме того, project-support будет использоваться и во внешних проектах (здесь project-consumer).
- родительский проект (pom)
- поддержка проекта (jar)
- project-service-a (война)
- project-service-b (jar)
- проект-потребитель (война)
- поддержка проекта (jar)
Извлечение project-parent.pom
<modules>
<module>../project-support</module>
<module>../project-serviceA</module>
<module>../project-serviceB</module>
</modules>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<tomcat.version>7.0.50</tomcat.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-catalina</artifactId>
<version>${tomcat.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.6.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20140107</version>
<scope>provided</scope>
</dependency>
</dependencies>
</dependencyManagement>
Выдержка из project-support.pom
<parent>
<groupId>com.somecompany.project</groupId>
<artifactId>project-parent</artifactId>
<version>1.1.0-SNAPSHOT</version>
<relativePath>../project-parent</relativePath>
</parent>
<artifactId>project-support</artifactId>
<name>projectsupport</name>
<dependencies>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-catalina</artifactId>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
</dependency>
</dependencies>
Извлечение project-service-a.pom
<parent>
<groupId>com.somecompany.project</groupId>
<artifactId>project-serviceA</artifactId>
<version>1.1.0-SNAPSHOT</version>
<relativePath>../project-parent</relativePath>
</parent>
<artifactId>project-service-a</artifactId>
<name>projectsupport</name>
<dependencies>
<dependency>
<groupId>com.somecompany.project</groupId>
<artifactId>project-support</artifactId>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
</dependencies>
Итак, при просмотре иерархии зависимостей project-ServiceA (а также в действующем pom) требуемые зависимости project-support не включены, что приводит к ошибкам компиляции кода. Кроме того, project-support используется в проектах, выходящих за рамки родительского проекта.
Итак, мой вопрос: почему maven не разрешает дерево зависимостей project-support и добавляет их в эффективный pom?
Заранее спасибо.
Ответ №1:
Вы установили для области зависимостей значение, предоставленное в разделе управления зависимостями вашего родителя. Согласно введению в механизм зависимостей, область видимости зависимости используется для ограничения транзитивности зависимости.
Приведенное выше связанное введение также включает таблицу, которая объявляет, какие области играют в игре с транзитивностью, а какие нет. Предоставленная область видимости не является частью транзитивности.
Таким образом, решение состоит в том, чтобы не объявлять никакой области в управлении зависимостями, но объявлять разумную область в использовании зависимостей.
Комментарии:
1. Спасибо за ссылку, на этом фоне мне наконец удалось это понять. Это может повлиять на нашу стратегию развертывания, но решение работает. Спасибо