2

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

我构建它并将其安装到我的本地 maven 存储库。我可以看到它已成功放置在那里。查看 .m2/repository/derp/Foo/1.0 它有一个 .pom 定义了所有依赖项。

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

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

我可以在 Eclipse 中的“Maven 依赖项”中看到 Jar,扩展该 jar 我可以看到它在 META-INF/maven/derp/Foo/pom.xml 中有正确的 pom 和依赖项。

但是我在 Foo 之上的顶级项目没有得到 Foo 需要的依赖项。我得到运行时异常,并且在 Eclipse 中我的 maven 依赖项中没有任何传递依赖项 jar。

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

- - - 编辑 - - -

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

<dependencies>

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

ETC...

这些是 maven 在我刚刚构建和运行这个 Foo 项目时正确找到的 jar,但是如果项目依赖于 Foo (Bar),maven 不包含这些 jar,并且我在尝试运行 Bar 时会发现。

4

1 回答 1

1

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

如您所说,构建反应器中的任何“上方”Foo都应直接取决于。指定Foo的将解析为的依赖项(在指定的范围内)。<dependency/> FooFoo

如果不了解您项目的具体情况,我们不可能进一步帮助您。

一些可能的常见情况:

  1. 您希望能够在某些非执行阶段访问test范围内的依赖项。test只是不正​​确。
  2. 您希望指定对工件的依赖项会导致java运行时自动为您加载这些依赖项。这也不是真的。
    您需要在maven exec 插件exec:java上调用目标,并在.<configuration/><execution/>
  3. 你误会<dependencyManagement><dependencies>。这发生的方式比我预期的要多。
于 2016-05-27T22:42:27.700 回答