如何避免在我创建的开源项目的标识符,包或名称空间中使用自己的名称?


15

我在自己的时间里做了很多开发工作。我从事的这些项目都是为了娱乐和学习(到目前为止)。我通常使用Maven进行Java开发,但也曾涉猎.NET和Python。我从事的所有项目都使用开源许可证,尽管其中大多数不在任何公共代码存储库中。

Java / Maven开发要求我使用唯一的groupId(例如,“ com.mydomain”)和唯一的package(目录)结构,通常包含groupId.NET开发鼓励唯一性,namespaces在这种情况下,我使用与Java package概念相似的约定。为了确保唯一性,我通常只使用其中一个域名颠倒的域名(例如“ ca.jessewebb”);我相信这是非常普遍的做法。

我正处于创建一个新的开源Java / Maven项目的初期阶段(我们将其称为“ newproj”),我想将其放在GitHub上。我在GitHub上的用户名是“ jessewebb”,因此它的网址为:https://github.com/jessewebb/newproj。我不想麻烦注册“ newproj.com”域名,所以我决定分别使用“ ca.jessewebb”和“ ca.jessewebb.newproj”作为groupIdpackage

在我看来,我的个人身份出现在代码中以及作为项目主页的一部分(在GitHub URL中)可能会导致潜在的贡献者对参与我的项目进行三思。这是一个问题,我不希望它成为我的项目。如果可以,我希望传达的信息是我不拥有该项目。现在,老实说,这确实没什么大不了的,因为我怀疑我的项目会吸引社区的广泛参与,但是我也认为这更多的是避免任何可能阻止潜在捐助者的理由。

再举一个例子,我几年前创建了一个Google Code项目(我们称其为“ oldproj”)。创建项目时,我知道我将其托管在Google Code上,因此我使用了groupIdand包名称“ com.googlecode.oldproj”,这与Google Code为每个新项目提供的默认域名相反。事实证明这不是一个好主意。一年多后,我搬到了代码到不同的回购协议,我不得不重新命名这些标识符(以及我没有但...)。当时,我没有任何域名,最终我购买了域名“ oldproj.com”,并使用了它。我之所以喜欢它,是因为它为项目赋予了自己的身份,并且我并没有在代码上加盖我的名字。我可以很容易地注册“ jessewebb.ca”域名,并使用“ ca.jessewebb.oldproj”作为软件包名称,但是我没有,因为那时我也有同样的担忧。

所以我的问题是

在创建开源项目时如何避免使用我自己的(域名)名称,同时又保持包/名称空间的唯一性?

随着项目获得更大的发展势头,注册域名很有意义,但是尽早这样做似乎很愚蠢和浪费金钱。我意识到我实际上并不需要拥有域名才能在代码中使用它,但是这感觉很错误,同时可能导致擅自占地者从您的身下抢走它。别人对这个困境怎么办?是否有一些流行的(广泛使用的,大型社区等)开源项目的示例,这些项目包含原始开发者的身份作为其自身标识符的一部分?


2
哇,相当宽松,但还是个好问题!
Marcel

1
在包/命名空间中使用UUID?;-)
Jeroen

Answers:


5

在我的项目中,我给他们起一个名字,但不一定是一个域。因此,无论代码位于何处,我的包名称(和名称空间)通常只是“ projectname.libraryname”。

我习惯于.NET,它可以很自由地处理。


当我没有或(立即)想要为该项目注册域时,我认为这是一个很好的解决方案。当我拥有域名时,甚至可以这样做。甚至可以帮助确保我使用唯一的项目名称,这永远不是一件坏事。除非有更好的答案,否则我可能会很快接受这个答案。谢谢!
Jesse Webb

是的,.NET程序员可以这样做,但这不是一个好主意。如果项目名称是一个虚构的单词,它可以解决问题,但是我希望我见过的每个“下载器”或“浏览器”项目都能赚到一美元。
罗斯·帕特森

1
我已经开始在所有项目中使用这种策略。我为项目提出了一个唯一的名称,几乎是一个代号(对双关语),并将其用于我的包/命名空间。使我不必担心域名,至少在我想要一个域名的时候到了。
杰西·韦伯

2

我不记得在哪里看过,但是我看过它建议使用如下结构:

YourIdentifier.YourProduct.YourComponent

YourIdentifier可以是您所拥有的域,您的(相当独特的)Internet别名等。组件名称保留为产品的“核心”代码。例如,我有一个名为BarelyMVC的小型MVC框架,因此我在其中有这样的命名空间:

Earlz.BarelyMVC
Earlz.BarelyMVC.Authentication
Earlz.BarelyMVC.Caching

等等。在大多数情况下,您的在线别名非常独特,可以避免其他开发人员之间的冲突

如果您害怕使用自己的在线别名,请为自己创建一个“标签”。它不一定要正式注册为公司或任何东西(甚至是域名)。例如,流行Json.Net库使用命名空间Newtonsoft.Json。这显然是基于作者的姓氏“ newton”,但我认为没有人真的在乎。如果您确实有一家正式的公司注册,那么您当然可以使用它。由我公司例如生产的大多数公共API已经命名空间开始与PreEmptiveSolutions该公司的名称


1
在.NET世界中非常普遍,在这个世界中,反向域名从来没有真正流行过。只要“ YourIdentifier”非常独特,它就会起作用。但是,即使是Newtonsoft也只是偶然地独一无二-James Newton-King实际上并没有经营这样的公司,而且如果他这样做的话,它的商标将仅在新西兰存在。
罗斯·帕特森

1

没有规定Java包名称或.NET名称空间是域名。甚至没有要求它们必须唯一,尽管这当然是一个好主意。我实际上认为您使用的是正确的,除非您想公开使用新域名com.googlecode.oldprojcom.oldproj否则我不会选择穿鞋的。


我意识到并没有规定您必须使用域名,但是我认为这是一种非常普遍的做法,至少在Java和.NET世界中,只是因为这样做有助于确保唯一性。另外,您说您认为我使用是正确的com.googlecode.oldproj,为什么您认为这是个好主意?回想起来,我认为将代码绑定到托管服务提供商有点愚蠢。
Jesse Webb

1
关键不是要将您与某个托管服务提供商联系在一起,而是要说这是该项目特有的常规唯一标识符。从技术上讲,所有这些都是“ com.jesseweb.oldproj”。因此,由于您不希望附加名字,所以这是一个不错的决定。Java包和.NET命名空间不应该是将您引导到下载站点等的路标,而只是按照惯例唯一的标识符。
罗斯·帕特森
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.