Импортировать класс из транзитивной зависимости
У меня есть следующие зависимости: 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 может изменить свои зависимости в будущем), а также скрывает ваши "реальные" зависимости.