在Eclipse Java中,我遇到以下情况:
Project1
+- Project2
+- Project3
Project1,Project2和Project3是常规的Java项目,已通过“文件”>“新建Java”项目创建,然后通过在“项目资源管理器”>“ Maven”>“转换为Maven”中单击鼠标右键将其转换为Maven项目。 Project1包含我的应用程序入口点(静态main方法)。 Project1代码调用Project2代码,而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对本地库文件(Windows上的DLL文件)使用Maven依赖项。我们将此依赖关系称为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的“目标/类”文件夹位于类路径中,正如预期的那样,Project1和Project2的Maven依赖项也位于类路径中,但Maven Project3的依赖项丢失。结果,无法加载本机库。
如果我将org.foo.bar/mylibrary依赖项声明从Project3移到Project2,那么Maven依赖项的确会出现在类路径中。
我尝试使用Eclipse 2019-09和2020-03,结果相同。
似乎Eclipse没有添加驻留在间接依赖关系中的Maven依赖关系。 如何告诉它在类路径中为所有依赖项(即直接和间接)添加Maven依赖项?
编辑:我在Project2的pom.xml文件中添加了此显式声明:
<dependencies>
<dependency>
<groupId>Project3</groupId>
<artifactId>Project3</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
,并且有效。但这对我来说毫无意义。考虑另一种情况,如果我不在Project1和Project2之间添加显式的Maven声明,那么事情就可以了。为什么?为什么要在Project2和Project3之间而不是在Project1和Project2之间执行此操作,以使其起作用?