我有一个maven repo中不存在的第三方jar,我们称之为“a.jar”,这也取决于至少20多个第三方罐子,其中大多数不在maven或者,让我们称他们为“b.jar,c.jar,d.jar,......”。如何正确地将它安装到具有所有依赖关系的mvn repo中?
我不认为标准“mvn install:install-file”会在这种情况下起作用,因为我会在回购中安装“a.jar”,但它的依赖性都没有,对吧?另外,当它在其他项目中使用时,mvn甚至会知道“a.jar”具有依赖性。
我见过另一个与我正在尝试的类似的stackoverflow问题,
maven install and deploy 3rd party dependencies with simple command line
但我是一个mvn noob而且它解释不够,所以我大部分都失去了他正在做的事情和原因:(。我的意思是我不明白为什么我需要包含pom.xml父母和子文件将这些依赖项安装到mvn repo中...我现在拥有的是一个包含大量jar的lib文件夹!
答案 0 :(得分:4)
尽管Maven让我们的生活变得更轻松,但您已经设法找到一个实际上让我们的生活变得更加困难的领域,至少在最初阶段。在可以使用它们的存储库中丢失库是一种正确的痛苦,特别是对于新手。一旦图书馆在回购中,Maven的依赖机制就很棒,生活也值得生存。从长远来看,它可以为您节省大量时间和头痛。但首先你必须忍受......
要做的是将您的图书馆放入仓库,以便maven可以使用它。首先,我会非常努力地看看中央回购,并确保你所追求的图书馆已经存在。你可以为你的图书馆search the central repo。
如果必须将其部署到仓库,首先应该知道的是大多数人在公司或专用网络中托管自己的存储库。 Artifactory和Nexus都是maven存储库管理器,您应该考虑运行其中一个,这样您就可以从maven构建和第三方库中部署工件了。我使用Artifactory非常喜欢它,但我听说Nexus非常好,并且是由Sonatype人写的。这些repo充当中央仓库的代理,您可以将maven构建专门指向它们,并从中央仓库解析并下载工件并缓存它们。中央回购公司喜欢这个,因为它们被网络流量所淹没。
在您的网络上缺少回购,您始终可以将工件部署/安装到您的盒子上的本地仓库(位于userhome.m2 \ repository中)。当您在本地盒子上运行maven构建并告诉maven“安装”时,这就是放置构建工件的地方。此外,在构建期间从中央存储库下载的任何依赖项maven下载并在以后的构建期间重用,以减少网络流量。缺点是,如果你与其他开发人员合作,他们不能只检查并构建你的代码......他们必须经历令人沮丧且容易出错的步骤,将工件部署到他们的本地仓库。因此,推荐的方法是为所有开发人员可以使用的所有工件创建一个公司maven repo。
除此之外,您可以遵循两个通用策略来解决您的问题。您可以使用默认poms部署第三方库及其所有依赖项,然后在项目pom文件中将它们全部声明为依赖项。或者,您可以依赖maven的传递依赖机制。您将首先使用pom文件部署第三方库,该文件声明其所有依赖项...然后将所有依赖项部署为使用默认poms。最后,在你的项目pom中你可以声明对第三方库的依赖,并通过maven的传递依赖机制maven将获取所有其他库。
我建议您花一些时间阅读在线Sontatype books,包括"Maven: The Complete Reference"和"Repository Management with Nexus"。
答案 1 :(得分:2)
当您执行mvn install:install-file时,您可以为要安装的内容指定一个pom文件。把你的依赖放在那个pom中。
编辑: 哦,然后为依赖项做这件事。可能更容易为依赖项做这件事。