maven - 安装具有 3rd-party non-mvn jar 依赖项的 3rd-party non-mvn jar

标签 maven installation

我有一个 maven 仓库中不存在的第三方 jar,我们称它为“a.jar”,它也依赖于至少 20 多个第三方 jar,其中大部分不在 maven 中或者,我们称它们为“b.jar、c.jar、d.jar、...”。我如何将它及其所有依赖项正确安装到 mvn 存储库中?

我认为标准“mvn install:install-file”在这种情况下不起作用,因为我会将“a.jar”安装到存储库中,但它的任何依赖项都不会在那里,对吧?另外,当它在其他项目中使用时,mvn 怎么会知道“a.jar”具有依赖性。

我看到另一个 stackoverflow 问题似乎与我正在尝试做的类似,

maven install and deploy 3rd party dependencies with simple command line

但我是一个 mvn 菜鸟,它解释得不够多,所以我大部分时间都不知道他在做什么以及为什么 :(。我的意思是我不明白为什么我需要包含 pom.xml parent和子文件以将这些依赖项安装到 mvn 存储库中……我现在只有一个 lib 文件夹,里面有一大堆 jar !

最佳答案

尽管 Maven 让我们的生活更轻松,但您已经设法找到了一个它实际上让我们的生活更艰难的领域,至少在最初是这样。在可以使用它们的存储库中找到丢失的库可能是一件很痛苦的事情,尤其是对于新手而言。一旦一个库在 repo 中,Maven 的依赖机制就很棒,生活是值得的。从长远来看,它可以为您节省大量时间和头痛。但首先你必须受苦......

要做的事情是将你的库放在一个 repo 中,这样 maven 就可以使用它。首先,我会非常认真地查看中央仓库,并确保您要查找的库不存在。你可以search the central repo为您的图书馆。

如果您必须将它部署到一个存储库中,您应该知道的第一件事是大多数人在他们的公司或私有(private)网络中托管他们自己的存储库。 ArtifactoryNexus都是 maven 存储库管理器,您应该考虑运行其中一个,这样您就可以在某个地方部署来自您的 maven 构建以及第 3 方库的 Artifact 。我使用 Artifactory 并且非常喜欢它,但我听说 Nexus 也非常好并且是由 Sonatype 的人编写的。这些 repo 协议(protocol)充当中央 repo 协议(protocol)的代理,您可以在其中专门将 Maven 构建指向它们,它们从中央 repo 协议(protocol)解析和下载 Artifact 并缓存它们。中央仓库喜欢这个,因为它们被网络流量淹没了。

如果您的网络上缺少存储库,您始终可以将 Artifact 部署/安装到您机器上的本地存储库(位于 userhome.m2\repository 中)。当您在本地机器上运行 Maven 构建并告诉 Maven“安装”时,这就是放置构建 Artifact 的地方。此外,在构建期间从中央仓库下载的任何依赖项 Maven 都放在此处,并在以后的构建中重复使用,以减少网络流量。不利的一面是,如果您与其他开发人员合作,他们不能只是检查并构建您的代码……他们必须经历令人沮丧且容易出错的步骤才能将 Artifact 部署到他们的本地存储库。因此,推荐的方法是为所有开发人员都可以使用的所有 Artifact 创建一个公司 Maven 存储库。

除此之外,您可以遵循两种通用策略来解决眼前的问题。您可以使用默认 poms 部署第 3 方库及其所有依赖项,然后在您的项目 pom 文件中将它们全部声明为依赖项。或者,您可以依赖 maven 的传递依赖机制。您将首先使用声明其所有依赖项的 pom 文件部署第 3 方库...然后将其所有依赖项部署为使用它们的默认 poms。最后,在您的项目 pom 中,您只需声明对第 3 方库的依赖,然后通过 maven 的传递依赖机制,maven 将获取所有其他库。

我建议您花一些时间在线阅读 Sontatype books包括 "Maven: The Complete Reference""Repository Management with Nexus" .

关于maven - 安装具有 3rd-party non-mvn jar 依赖项的 3rd-party non-mvn jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8975235/

相关文章:

eclipse - 使用嵌入式 jetty 的 Spring 应用程序启动速度慢

maven - 如何在 Spring Boot Maven 多模块项目中包含来自另一个模块的资源

javascript - 如何安装 jSweet?

java - 创建一个独立的jar文件

python - 为什么我在安装 pip 包时没有删除六个的权限?

java - 使用 Spring MVC 应用程序实现 Tiles 3

java - Maven 中 eclipse 编译器的参数

centos - 在 CentOS 中安装 PhantomJS

python - 在 python 中安装库/包

找不到 Maven 可执行文件