Вложенная зависимость Maven недоступна - PullRequest
0 голосов
/ 14 октября 2019

У меня есть проект maven и в родительском POM, и я объявил некоторые зависимости внутри этого родительского POM. Это POM используется в дочернем POM, как показано во фрагменте кода. При компиляции проекта Child IntelliJ жалуется, что не может найти интерфейс, используемый в родительском проекте. Этот интерфейс объявлен в зависимости "anotherApp" в родительском POM.

Мое понимание зависимостей Maven заключается в том, что, посколькуЯ объявил зависимость в Parent POM, она должна наследоваться и в дочернем POM, и дочерний процесс должен иметь возможность доступа к этим зависимостям и их классам / интерфейсам без проблем.

Я пытался добавить зависимость внутри dependencyManagementтег в родительском ПОМ. Но не могу добиться того, чего ожидаю получить. Я также изучил деревья зависимостей родительских и дочерних проектов. В родительском дереве зависимостей в качестве своей зависимости отображается anotherApp, а в дочернем - в качестве зависимости отображается только родитель, в качестве зависимости через родительский элемент не отображается anotherApp.

Так выглядит мой родительский POM

<project>
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>it.app</groupId>
    <artifactId>commonParent</artifactId>
    <version>1.0-SNAPSHOT</version>
    <relativePath>../CommonParent/pom.xml</relativePath>
  </parent>

  <groupId>com.app</groupId>
  <artifactId>parent</artifactId>
  <version>0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <dependencies>
      <dependency>
          <groupId>com.myapp</groupId>
          <artifactId>anotherApp</artifactId>
          <version>2.0-SNAPSHOT</version>
      </dependency>
  </dependencies>
</project>

Вот так выглядит мой дочерний POM

<project>
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>it.app</groupId>
    <artifactId>commonParent</artifactId>
    <version>1.0-SNAPSHOT</version>
    <relativePath>../CommonParent/pom.xml</relativePath>
  </parent>

  <groupId>com.app</groupId>
  <artifactId>child</artifactId>
  <version>0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <dependencies>
      <dependency>
          <groupId>com.app</groupId>
          <artifactId>parent</artifactId>
      </dependency>
  </dependencies>
</project>

В "anotherApp" объявлен интерфейс Foo. Этот интерфейс доступен родительским проектом. Но дочерний проект не может получить доступ к этому интерфейсу. IntelliJ жалуется, что не может получить доступ к этому интерфейсу.

1 Ответ

3 голосов
/ 14 октября 2019

Две вещи, которые необходимо исправить:

  • Родительский POM должен иметь <packaging>pom</packaging>.
  • Дочерний проект должен не использовать родительский POMв качестве зависимости, но добавьте его в тег <parent>.
...