2012-01-11 124 views
2

我是一名Maven新手,花了数小时学习基础知识,但是我仍然没有找到任何好的文档,说明如何在本地安装具有所有(传递)依赖项的第三方JAR。使用传递性依赖/依赖树安装第三方库?

我知道mvn install:install-file确实安装了一个JAR。但如何在repsoitory这样的本地安装:

+ Parent.jar 
    + ChildA.jar (Requuired by Parent) 
    + ChildB.jar (Required by Child A) 

为了使它更complcated与现实生活:Parent.jar和ChildA.jar是在公共Maven仓库,但儿童不能使用传统/商用罐B是在公共存储库中找到的jar(例如像日志记录罐)。我不仅希望在本地安装它们(具有系统依赖性),而且还要“正确”地将它们与maven集成,以便我可以将此依赖关系树重新分发给其他开发人员或公众(我认为这是对于maven来说很重要),以便maven知道并理解依赖树(以避免版本冲突,不必要的下载等等)。

任何链接或信息如何描述这种可能性会很好。

非常感谢! 标记

回答

1

如果它是一个商业jar,如果您将它部署到中央存储库,则可能违反许可证,唯一的办法是部署到公司的repo(如果您有一个设置)。

为了做到这一点,您需要为childA定义一个pom,将childB指定为依赖项,然后运行install:install-file目标。然后对父进行相同操作,并使用childA作为依赖关系。

一旦你这样做,你就可以把这些项目,通过它的GUI很容易地上传到公司的中央仓库(Nexus和Artifactory都通过GUI支持)。

+0

谢谢,那真的是我正在寻找的东西:我意识到我必须自己编写所有“非Maven提供的”库并将它们与这些POM一起安装。 – Markus 2012-01-15 19:27:49

0

我想,你可能会寻找this

Maven会将所有需要的依赖加载到本地回购本身中,如果它们在线回购中是可用的。如果你想安装你自己的项目,用配置文件设置反应堆以获得所有需要的模块,并在其上运行mvn install -P yourprofile。更多关于配置文件可以发现here。 Afaik没有办法,可以将包括它们的依赖项目在内的项目安装到当地的仓库中。

+0

那有什么用处?带有系统依赖的 – AHungerArtist 2012-01-11 13:07:04

+0

你可以使用不在回购站的罐子,而不仅仅是jdk的东西。 – Corubba 2012-01-11 13:08:48

-1

,如果你需要将它安装到本地的仓库,只需要使用

mvn dependency:go-offline 
+0

这不会在任何存储库中安装依赖项,它会解析依赖项,以便脱机工作。 – 2012-01-11 14:49:53

+0

是的,你可以离线工作,因为依赖项被下载并放到本地存储库中。也许你对我的使用安装感到困惑?这并不意味着maven的安装阶段。我希望你知道本地和远程存储库的区别:http://maven.apache.org/guides/introduction/introduction-to-repositories.html – 2012-01-11 16:04:35

+0

我恭敬地提出混淆是你的最终目的。问题是如何在本地回购和中央回购中安装*目前*任何*回购的工件。依赖插件对用户不做任何事情,因为工件在首先下载的任何存储库中都不可用。 – 2012-01-11 16:09:39

1

既然你真的想真正发布,让其他人在公众可以与定义的依赖使用它,你很可能把第三方罐子变成公开的回购。

Here are instructions关于如何做到这一点。

请注意,虽然代码许可可能不允许您将其发布到中央回购站。在部署之前检查它。

+0

您需要确保您可以将许可证中提供的jar上传到中央库。否则,您只能部署到贵公司的中央仓库。 – 2012-01-11 14:55:54

+0

这是正确的,Sonatype会在发布之前验证是否存在此类限制。这是记录在我发布的链接中,但我将编辑并将该注释添加到我的答案中。 – Robin 2012-01-11 15:16:14