Maven - 安装到本地仓库,没有获得传递依赖

时间:2016-05-26 16:44:59

标签: java eclipse maven transitive-dependency

我有一个maven项目,我想与其他几个项目分享。它有一些自定义代码,然后是一些依赖于log4j,jasypt等的东西。

我构建它并将其安装到我当地的maven repo。我可以看到它成功地放在那里。查看.m2 / repository / derp / Foo / 1.0,它有一个.pom及其所有依赖项。

我也可以将它定义为我的更高级别项目中的依赖项,并进行编译。

    <dependency>
        <groupId>my.group</groupId>
        <artifactId>Foo</artifactId>
        <version>1.0</version>
    </dependency>

我可以在eclipse中看到我的'Maven Dependencies'中的Jar,并扩展该jar我可以看到它在META-INF / maven / derp / Foo / pom.xml中具有正确的pom和依赖关系。

但是我在Foo之上的顶级项目没有得到Foo需要的依赖项。我得到运行时异常,我可以看到在eclipse中我的maven依赖项中没有传递依赖jar。

我需要做些什么才能确保Maven知道在我的本地仓库中查看Pom for Foo,这样它将获得所需的所有传递依赖项?

-----编辑-----

回答下面的评论,它们是这样定义的,依赖项标签位于项目标签下的顶层。

<dependencies>

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.2</version>
    </dependency>
等等......

当我正在构建和运行这个Foo项目时,这些是maven正确找到的罐子,但是如果项目依赖于Foo(Bar),maven不包括这些罐子,我发现当我尝试运行时杆

1 个答案:

答案 0 :(得分:1)

“Foo上面的顶级项目没有获得依赖关系”是什么意思?

构建反应器中“{1}”以上的任何内容都应直接依赖Foo,如您所述。指定的Fooresolve to <dependency/>的依赖关系(在Foo指定的范围内)。

如果不了解您项目的具体细节,我们可能无法为您提供进一步的帮助。

一些可能的常见情况:

  1. 您希望能够在某些非Foo执行阶段访问test范围内的依赖关系。事实并非如此。
  2. 您希望指定对工件的依赖性会导致 test 运行时自动加载这些依赖项。那也不是真的。
    您需要在maven exec plugin上调用java目标,并在exec:java内指定所需的解决范围,也可能指定<configuration/>
  3. 您错误<execution/>代表<dependencyManagement>。这种情况比我预期的要多。