2016-11-29 2 views
1

У меня есть следующие зависимости: A, B и X. «->» означает, что это зависит от.Класс импорта из транзитивной зависимости

A -> B 
X -> A 

В имеет следующий открытый класс:

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

PublicClassB используемый 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>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

Это должно работать без проблем. Если нет, то, возможно, ваша настройка Maven неверна или у вас нет последней версии A или B в вашем репозитории Maven, или Eclipse необходимо обновить и т. Д. – Jesper

+0

Каков ваш репозиторий для классов A, B и X ? И я думаю, что вы также должны указать также 1.0.0 внутри каждого

+0

@SergioMontoro да извините моя ошибка, добавлен тег версии – dantebarba

ответ

3

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

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