Импортировать класс из транзитивной зависимости

У меня есть следующие зависимости: A, B и X. "->" означает, зависит от.

A -> B
X -> A

B имеет следующий публичный класс:

public class PublicClassB {
     public static void do() {
     }
}

PublicClassB используется X и AE

Пом для класса А является следующим:

<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>my.company.name</groupId>
    <artifactId>A</artifactId>
    <version>1.0.0</version>
    <dependencies>
          <dependency>
              <groupId>my.company.name</groupId>
              <artifactId>B</artifactId>
              <version>1.0.0</version>
          </dependency>
    </dependencies>
</project>

Pom для X является следующим:

<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>my.company.name</groupId>
    <artifactId>X</artifactId>
    <version>1.0.0</version>
    <dependencies>
          <dependency>
              <groupId>my.company.name</groupId>
              <artifactId>A</artifactId>
              <version>1.0.0</version>
          </dependency>
    </dependencies>
</project>

Есть ли способ получить доступ к PublicClassB#do() из X? Я не могу заставить импорт работать, Eclipse не обнаруживает пакет на B.

1 ответ

Прежде всего, как уже упоминалось в комментариях, вам нужен тег версии или получить версию из какого-либо управления зависимостями. Во-вторых, m2e (плагин Eclipse) не всегда правильно определяет зависимости. Попробуйте собрать с Maven (запустите как -> Maven build) и посмотрите, нет ли ошибок.

В-третьих: если вы используете класс из B, вы должны также указать B в качестве зависимости. Полагаться на то, что B рисуется косвенно, опасно (A может изменить свои зависимости в будущем), а также скрывает ваши "реальные" зависимости.

Другие вопросы по тегам