将第三方库安装到托管Maven存储库的最佳实践?

时间:2009-05-05 13:11:48

标签: java maven-2

假设您有一个使用第三方库的项目,例如Google's Analytics Data API (gdata),它似乎当前未部署到任何知名或流行的Maven公共存储库/索引中。这不是什么大问题,因为我可以将工件部署到我的本地托管的Nexus存储库中。

但是,Maven社区中有没有关于如何在我的POM中命名这个库的“坐标”的最佳实践,因为标准尚未在公共存储库中设置呢?

例如,我应该在我的POM中将其引用为

<dependency>
    <groupId>com.google</groupId>
    <artifactId>gdata-analytics</artifactId>
    <version>1.0</version>
</dependency>

还是有一些更好/更标准的方式让我想出artifactId

(而且,为什么像谷歌这样的几十家图书馆的提供商不会花费一些精力将它们托管到主流的公共Maven存储库/索引中?这不会让人们更容易使用它们吗?因此推动采用?)

5 个答案:

答案 0 :(得分:3)

我一直在使用Maven大约一年,并且从未遇到过“标准”命名约定。我通常会做你正在做的事情,尽管我尽量使版本号尽可能接近“真实”版本号,以避免在部署多个版本时出现混淆。

答案 1 :(得分:3)

你做的很合理。加分:

  • 当Maven从Nexus获取工件时,该工件被命名为artifactId-version。 GroupId被省略了。因此,当工件移动(例如,复制到Web应用程序中的WEB-INF / lib)时,您的jar文件将显示为“ gdata-analytics-1.0 ”。这通常不是问题。但是,如果工件名称非常常见,例如“util”,您可能希望在artifactId中包含组信息,例如使用“ com.google ”的groupId和“ com.google.gdata-分析”。是的,重复是令人讨厌的,但它会在文件系统和搜索中产生最大的清晰度。我实际上遇到了一个问题,其中两个不同的groupId都有一个“ core-1.0 ”jar,一个在构建时被复制到lib目录时覆盖了另一个。

  • 我的第二个MattK建议将你的Maven versionId与神器众所周知的任何版本对齐。

  • 如果您遵循Dominic的建议,将groupId添加前缀为您自己的公司名称(例如acme),则可以更轻松地利用Nexus的路由功能。它将确保内部工件的请求不会传播到Maven Central并最终出现在他们的日志中(如果您的groupId是“ acme.secret.project ”,这可能很重要!

答案 2 :(得分:2)

我倾向于使用我自己常用的groupId为groupId添加前缀。这绝对清楚地说明了这是我上传的内容,以防万一它泄露给全世界。

答案 3 :(得分:0)

许多sourceforge项目在groupid中使用项目名称,例如:

GroupId net.sf.json-lib ArtifactId json-lib

这可能适用于google示例,因为有很多google工件。

请记住,您可以使用classifer标签来区分两个罐子 在相同版本但为不同目的而构建,例如不同的JVM。

答案 4 :(得分:0)

您可能很幸运:Google为自己的项目拥有自己的Maven回购。查看此页面:Instructions

我有一些专属的Jar文件,所以我不得不在每个工作站加载它们(我们还没有公司共享的回购)。我将它们放在/ lib目录中的源代码树中(并不总是一个好主意),并添加了一个包含mvn install-file命令的小.BAT文件(或.sh脚本)来加载我的本地机器的repo我建立的时间。如果我必须更新这些jar,我也会更新“load.bat”文件,然后重新运行它。在我的情况下,我不希望每年发生一次以上,也许更少。