Eclipse子项目中的Maven依赖项未出现Java类路径

时间:2020-05-03 11:20:37

标签: java eclipse maven m2eclipse eclipse-jdt

在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之间执行此操作,以使其起作用?

0 个答案:

没有答案
相关问题