java - 将 3rd 方库安装到托管的 Maven 存储库中的最佳实践?

标签 java maven-2

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

但是,在 Maven 社区中是否有关于我应该如何在我的 POM 中命名这个库的“坐标”的最佳实践,因为公共(public)存储库中还没有为它设置标准?

例如,我是否应该在我的 POM 中将其称为

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

或者是否有更好/更标准的方法让我想出 artifactId

(而且,为什么像 Google 这样的几十个库的提供商不花点力气将它们托管到主流公共(public) Maven 存储库/索引中?这难道不会让人们更容易使用它们吗?从而插入采用?)

最佳答案

你所做的很合理。一些额外的要点:

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

    <
  • 我支持 MattK 的建议,即使您的 Maven versionId 与工件众所周知的任何版本保持一致。

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

关于java - 将 3rd 方库安装到托管的 Maven 存储库中的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/824782/

相关文章:

maven - 如何从命令行获取属性值,如果不是从环境中获取,如果不是 - 默认值?

为两个客户开发 Java Web 应用程序项目

java - 这个java程序是如何工作的?

java - 防止 JPA 实体被持久化

java - 更新我的谷歌应用程序引擎java应用程序而不降低用户流量?

java - Android Fatal : Error java. 创建 Socket 时单击按钮时出现 lang.IllegalStateException

Maven-ear-plugin 未复制 xml 文件

java - Spring Tool Suite 和 Spring Configurator - 目录结构

java - .NET 世界是否有 Maven 替代方案或端口?

java - 在 swing 中向图像添加滤镜