0

在我的多模块 Maven 项目中,假设我有两个模块,car并且horse. 它们都依赖于一个 JAR 文件,transport.jar一个在任何在线 Maven 存储库中都不可用的文件。因此,我需要找到一种方法使这些模块依赖于项目文件夹结构中某处的文件。

据我了解,默认的 Maven 解决方案是在本地存储库中手动注册 JAR 文件。虽然这可以在开发机器上工作,但它会在构建服务器上中断,该服务器会在每次构建之前清除其本地存储库。

我一直在网上搜索如何打开和关闭一段时间,发现了一些有用的东西,但没有一个完全有效。

例如,一个常见的答案是使用<scope>system</scope>. 但是,不仅其他人声称这样做是非常糟糕的做法,而且它在构建服务器上也不起作用。(顺便说一句,我还想指出,使用 JAR 的绝对路径也是不可能的,因为它是在几台不同的机器上构建的。)

我发现一个更有用的方法是在 POM 文件中定义一个本地存储库,指向路径file:${project.basedir}/lib。(例如在本文中)不幸的是,如果我将 JAR 和存储库定义放在carPOM 中,我无法成功地将依赖项添加到horse. car我已经尝试过添加和不添加对in的额外引用horse,以及在 in 中定义第二个存储库horse,指向file:${project.basedir}/../car/lib. 如果我尝试制作第三个模块,这个问题也会仍然存在transport-lib,专门用于包装 JAR 依赖项。

我很可能将 JAR 文件添加到两个模块并定义两个单独的模块本地存储库,但我真的不想这样做,除非我必须保持两个(经常更新的)JAR 同步等。

所以,我的问题如下:鉴于提到的参数和限制,有人可以给我一个确认工作的方法,让两个模块依赖于项目中的同一个 JAR 文件吗?

4

1 回答 1

2

最好的解决方案是使用像 Archiva、Artifactory 或 Nexus这样的存储库管理器,并将该工件安装到存储库管理器中。之后,您可以直接在 pom 文件中使用此工件,而不会出现任何问题。

不要使用范围系统,因为它会在其他等发布后引起其他问题。

于 2013-10-21T16:52:25.493 回答