2013-10-21 131 views
0

在我的多模块Maven项目中,假设我有两个模块,分别为carhorse。它们都依赖于JAR文件transport.jar,这是一个在任何联机Maven存储库中都不可用的文件。因此,我需要找到一种方法来使这些模块依赖于在项目文件夹结构中找到的某个文件。依赖于JAR的多个Maven模块

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

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

例如,一个常见的答案是使用<scope>system</scope>向文件添加依赖项。但是,不仅其他人声称这是非常糟糕的做法,它也不适用于构建服务器。 (在附注中,我还想指出,使用JAR的绝对路径也是不可能的,因为它又建立在几个不同的机器上。)

我找到了一个更有用的方法是在POM文件中定义一个本地存储库,指向路径file:${project.basedir}/lib。 (Such as in this article)不幸的是,如果我将JAR和存储库定义放入car POM中,我无法成功将依赖项添加到horse中的JAR。我已经尝试了horse中的car以及没有额外的参考,并且在horse中定义了第二个存储库,指向file:${project.basedir}/../car/lib。如果我试图制作第三个模块transport-lib,这个问题也将继续存在,专门用于包装JAR依赖项。

我很可能会将JAR文件添加到这两个模块并定义两个单独的模块本地存储库,但我真的不想,除非由于需要保留两个(经常更新的)JAR同步等

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

回答

2

最好的解决方案是使用repository manager like Archiva, Artifactory or Nexus并将该工件安装到资源库管理器中。之后,你可以直接在你的pom文件中使用这个工件,而不会有任何问题。

不要使用范围的系统,因为它会为其他等释放后会导致其他问题

+0

我真的想找到这样做的Maven的唯一途径,但最终,我不得不采取Artifactory路线。我想,赢不了他们。 – Smallhacker