maven - 为什么 Apache Commons 库的 groupId 不一致,具体取决于项目?

标签 maven naming-conventions apache-commons

Apache Commons 是一组许多不同的库。在 Maven Central Repository 上,它们有两种不同的 groupIds 命名约定,具体取决于项目,例如

  • Commons Lang、Commons Compress、Commons Weaver - 'org.apache.commons'
  • Commons CLI、Commons IO - 'commons-[library_name]'

  • 它们之间有什么区别?

    最佳答案

    commons-[library_name]命名约定是较旧的遗留约定。 org.apache.commons - 样式名称遵循 current operating convention基于域名的 groupIds。在公约建立后启动的所有 Apache 项目都有一个形式为 org.apache.* 的 groupId .在公约成立之前启动的一些项目更改了它们的 groupId,而其他项目则没有。

    在 Maven 历史早期的某个时候,显然需要在 Maven Central 中的所有项目中强制实现通用唯一的 groupId,以避免名称冲突。确保这一点的一种简单方法是建立一个约定,项目作者只能使用他们控制的域名中的 groupId。因此,形式为 org.apache.* 的 groupIds来自 Apache 组织。

    但是很多项目已经不遵守约定了,changing the groupId is not as trivial as it sounds .主要原因是,如果旧的和新的 groupId 都是特定项目的依赖项,那么这两个 Artifact 都将被包含在内,然后您会遇到不同的 Artifact 提供完全相同的类的情况,这是类加载的噩梦。

    一些项目通过同时更改包名称和 groupId 来切换到新约定,例如 Commons Lang did .然而,更改包名通常被认为是非常具有破坏性的,因此 Commons Lang 仅在不兼容的 API 更改时才这样做。其他项目,如 Commons IO,有一些 discussionsback-and-forth关于它,但最终没有考虑进行转换,因为旧式名称无论如何都不会真正伤害任何人。

    这就是为什么今天大多数 Apache 项目都采用 org.apache.* 形式的原因。 ,但仍有一些不是。

    关于maven - 为什么 Apache Commons 库的 groupId 不一致,具体取决于项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32184114/

    相关文章:

    java - Maven 传递依赖中断构建

    java - 如何在 FileUtils.copyURLToFile(URL, File) 方法中指定 User Agent 和 Referer?

    Apache 通用 IO FileUtils 问题

    validation - 最好的 Java 电子邮件地址验证方法是什么?

    java - 如何将 sqljdbc_auth.dll 添加到我的 Maven 项目

    java.lang.NoSuchMethodError : javax. persistence.JoinTable.indexes()[Ljavax/persistence/Index;

    java - 在中央存储库中找不到 Maven ojbc 6 jar

    user-interface - 如何命名 GUI 元素?

    c# - 如果一个类不*总是*创建 Foo 对象,那么将其称为 FooFactory 是错误的吗?

    naming-conventions - "entity"和 "game object"之间有什么区别?