Maven-安装到本地repo,不获得可传递的依赖项



我有一个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标记位于项目标记下的顶层。

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

等等。。。

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

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

构建反应器中"高于"Foo的任何内容都应该直接依赖于Foo,正如您所说的那样。指定的<dependency/>将解析为Foo的依赖项(在Foo指定的范围内)。

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

一些可能的常见情况:

  1. 您希望能够在执行的某些非test阶段访问test范围的依赖项。只是不是真的
  2. 您期望指定对工件的依赖项会导致java运行时自动为您加载这些依赖项。这也不是真的
    您需要在maven-exec插件上调用exec:java目标,并在<configuration/>中指定所需的解决范围,可能也针对该<execution/>
  3. 你把<dependencyManagement>误认为是<dependencies>。这种情况比我预想的要严重得多

最新更新