В 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, чтобы это работало?