首页 > 解决方案 > Eclipse 子项目中的 Maven 依赖项未出现在 Java 类路径中

问题描述

在 Eclipse Java 中,我有以下情况:

Project1
+- Project2
   +- Project3

Project1、Project2 和 Project3 是常规 Java 项目,通过 File > New Java project 创建,然后在 Project Explorer > Maven > Convert to Maven 中右键单击转换为 Maven 项目。Project1 包含我的应用程序入口点(静态主方法)。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 的“target/classes”文件夹在类路径中,正如预期的那样,Project1 和 Project2 的 Maven 依赖项也在类路径中,但是 Project3 的 Maven 依赖项丢失了。因此,无法加载本机库。

如果我将 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 之间进行操作才能正常工作?

标签: javaeclipsemavenm2eclipseeclipse-jdt

解决方案


推荐阅读