Apache是一个由许多不同库组成的集合。在Maven中央存储库上,根据项目的不同,它们对groupIds有两种不同的命名约定。
'org.apache.commons''commons-[library_name]'他们之间有什么区别?
发布于 2015-08-25 05:25:33
commons-[library_name]命名约定是旧的遗留约定。org.apache.commons-style名称遵循基于域名的groupIds的现行运作公约。在建立约定之后开始的所有Apache项目都有一个表单groupId org.apache.*。一些在公约建立之前启动的项目改变了它们的groupIds,而其他项目则没有。
在Maven历史的早期,显然需要在Maven Central的所有项目中强制执行通用唯一的groupIds,以避免名称冲突。确保这一点的一个简单方法是建立一个约定,项目作者只能使用来自他们控制的域名的groupIds。因此,来自Apache组织的表单groupIds的org.apache.*。
然而,许多项目已经没有遵守约定,也没有遵守更改groupId并不像听起来那么简单。。主要原因是,如果旧的和新的groupIds都是特定项目的依赖项,那么这两个工件都将被包括在内,然后就会有不同的工件提供完全相同的类,这是类加载的噩梦。
一些项目通过与groupId一起更改包名,比如朗公,切换到了新的约定。然而,更改包名通常被认为是相当具有破坏性的,因此Commons只在不兼容的API更改的情况下进行了更改。其他项目,如Commons,对此也有一些讨论和往回走,但最终还是没能做出改变,因为旧的名字并没有真正伤害到任何人。
这就是为什么今天大多数Apache项目都是表单org.apache.*的原因,但是仍然有一些不是。
https://stackoverflow.com/questions/32184114
复制相似问题