我有一个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
指定的范围内)。
如果不了解您项目的具体情况,我们就不可能进一步帮助您。
一些可能的常见情况:
- 您希望能够在执行的某些非
test
阶段访问test
范围的依赖项。只是不是真的 - 您期望指定对工件的依赖项会导致
java
运行时自动为您加载这些依赖项。这也不是真的
您需要在maven-exec插件上调用exec:java
目标,并在<configuration/>
中指定所需的解决范围,可能也针对该<execution/>
- 你把
<dependencyManagement>
误认为是<dependencies>
。这种情况比我预想的要严重得多