47

我在 SO 上找不到回答我确切问题的 Q/A,所以我想我会发布它,看看会发生什么。

就 Java 包的命名约定而言,我知道它应该是反向域名:com.whatever.stuff并且我得到了关于禁止混合大小写、连字符、关键字等的规则。

我还阅读了 Java 语言规范的第 7.7 节(唯一包名称)。据我所知,Java 的规则是使用反向域来确保唯一性......如果你没有,那就去买一个:

You form a unique package name by first having (or belonging to an organization that has) an Internet domainname, such as sun.com.- 第 7.7 节

因此,如果我对花钱购买域名不感兴趣,我不属于我可以捎带名字的公司,我是否遗漏了应该遵循的命名约定的任何部分? 我想我可以随心所欲地为它命名,但我只是想知道我是否遗漏了任何东西。

注意:我想发布我的包供其他开发人员使用,所以我不想只做一些在我的系统上工作的东西,但如果可能的话,做一些更标准的东西。

我添加了android标签,因为我将要编写的java包将用于Android应用程序,不确定android开发人员是否有不同的意见。

4

5 回答 5

42

如果您要分发很多东西,我真的建议您获得一个域名。然而,另一种选择是使用您的电子邮件:例如bob@gmail.com将成为com.gmail.bob. 这比使用域名少见,但仍然由一些人完成,并且仍然确保唯一性。

于 2012-09-21T18:06:25.600 回答
40

一种约定是使用托管服务提供商的域名,例如

com.github.myrepositoryname
net.sf.sourceforge.myproject
com.googlecode.myproject

好处:

  • 您的包命名空间将是唯一的,因为托管服务提供商不会有两个同名项目
  • 它只和主机的成本一样昂贵,其中许多是免费的
  • 如果你想让你的项目进入 Maven Central,这可能是满足 Sonatype 要求的一种简单方法

缺点:

  • 如果您决定更改提供程序,则您的包结构已经过时,或者您引入了向后不兼容的更改以使源代码与您的新提供程序保持一致
于 2012-09-21T18:09:11.667 回答
5

域名可以免费获得。例如 dyn.com 在http://free.domain.name/上提供“whatever.dyndns.org”形式的免费域名

于 2012-09-21T18:09:40.307 回答
4

如果您是唯一的编码员,则可以使用您的姓名。我的名字是 Jannis Froese,所以我会使用

jannisfroese.projectname.stuff

或者如果您想保留“有效”域名

localhost.jannisfroese.projectname.stuff

(localhost 是保留的顶级域)

当然,这仅在您的名字足够独特的情况下才有效,因此不太可能发生冲突

于 2012-09-21T18:19:03.977 回答
1

在专业环境中,惯例是使用反向域。在与自己更相关的环境中,您可以使用org.projectname.packagename.*.

这是一个惯例,而不是硬性规定。您可以自由使用您喜欢的任何域命名样式。

于 2012-09-21T18:08:31.527 回答