Зависимости Maven в подпроектах Eclipse, не отображающие путь к классу Java - PullRequest
0 голосов
/ 03 мая 2020

В Eclipse Java у меня следующая ситуация:

Project1
+- Project2
   +- Project3

Project1, Project2 и Project3 - это обычные Java проекты, которые были созданы с помощью File> New Java project, а затем преобразованы в проекты Maven, щелкнув правой кнопкой мыши в Project Explorer> Maven> Преобразовать в Maven. Project1 содержит мою точку входа приложения (stati c основной метод). Код Project1 вызывает код Project2, который, в свою очередь, вызывает код Project3:

// Project1
public class Project1Class {
    public static void main(String[] args)
    {
        Project2Class.foo();
        System.out.println("Done");
    }
}
// Project2
public class Project2Class {
    public static void foo()
    {
        Project3Class.bar();
    }
}
// Project3
public class Project3Class {
    public static void bar()
    {
       // Use native code here
    }
}

Project3 использует зависимость Maven с собственными библиотечными файлами (файлы DLL на Windows). Давайте назовем эту зависимость org.foo.bar/mylibrary:

<!-- This dependency needs to load a native library -->
<dependencies>
 <dependency>
  <groupId>org.foo.bar</groupId>
  <artifactId>mylibrary</artifactId>
 </dependency>
</dependencies>

Моя проблема заключается в следующем:

При запуске или отладке Project1 я вижу, что Project1, Project2 и Project3 'target Папки / classes находятся в classpath, как и ожидалось, зависимости Maven для Project1 и Project2 также находятся в classpath, , но зависимости Maven в Project3 отсутствуют . В результате собственные библиотеки не могут быть загружены.

Если я переместлю объявление зависимости org.foo.bar/mylibrary из Project3 в Project2, то зависимость Maven действительно окажется в пути к классам.

Я пытался с Eclipse 2019-09 и 2020-03, тот же результат.

Кажется, Eclipse не добавляет зависимости Maven, которые находятся в косвенных зависимостях. Как я могу сказать ему добавить зависимости Maven в путь к классам для всех зависимостей, то есть как прямых, так и косвенных?

РЕДАКТИРОВАТЬ: я добавил это явное объявление в pom Project2. xml file:

<dependencies>
    <dependency>
        <groupId>Project3</groupId>
        <artifactId>Project3</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
</dependencies>

и это работает. Но это мало что значит для меня. Учитывая другой сценарий, все работает, если я не добавлю явное объявление Maven между Project1 и Project2. Почему? Почему я должен делать это между Project2 и Project3, а не между Project1 и Project2, чтобы это работало?

...