假设您有一个使用第三方库的项目,例如
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存储库/索引中呢?这不会让人们更容易使用它们从而驱动它们采用?)
解决方法
你做的很合理.一些额外的要点:
>当Maven从Nexus获取工件时,该工件被命名为artifactId-version. GroupId被省略了.因此,当工件移动(例如,复制到Web应用程序中的WEB-INF / lib)时,您的jar文件将显示为“gdata-analytics-1.0”.这通常不是问题.但是,如果工件名称非常常见,例如“util”,您可能希望在artifactId中包含组信息,例如使用“com.google”的groupId和“com.google.gdata-analytics”的artifactId.是的,重复是令人讨厌的,但它会在文件系统和搜索中产生最大的清晰度.我实际上有一个问题,其中两个不同的groupId都有一个“core-1.0”jar,一个在构建时被复制到lib目录时覆盖了另一个.>我的第二个MattK建议将Maven versionId与通常所知的工件版本对齐.>如果您遵循Dominic的建议,将groupId添加为您自己的公司名称(例如acme),则可以更轻松地利用Nexus的路由功能.它将确保内部工件的请求不会传播到Maven Central并最终出现在他们的日志中(如果你的groupId是“acme.secret.project”,这可能很重要!