【问题标题】:How should I name packages if I don't have a domain associated with me? [closed]如果我没有与我关联的域,我应该如何命名包? [关闭]
【发布时间】:2010-09-15 00:41:08
【问题描述】:

所以大多数 Java 资源在谈到包时都会提到 com.yourcompany.project 设置。但是,我不在公司工作,也没有网站。是否有任何通用的命名约定?一个电子邮件地址,也许?

【问题讨论】:

    标签: java namespaces packages


    【解决方案1】:

    使用像“bernard”这样的顶级域名或其他独特的域名。重要的部分是域是唯一的,这样您就可以避免冲突,而不是从真正的 Internet 顶级域(如 org 或 com)开始。例如

    import java.util.*;
    import bernard.myProject.*;
    import org.apache.commons.lang.*;
    

    【讨论】:

    • 我很确定伯纳德不止一个:P
    • 我是独一无二的!我的意思是,错误,这是有道理的。谢谢你。
    • 如果并且当您实际分发代码时,它将来自“某个网站”(sourcrforge、google 代码等),并且他们将拥有一个您可以与您的项目名称一起使用的域名.理想情况下,这将是 IDE 中的简单重构操作。在那之前,伯纳德。
    • @izb:然后呢?包名不需要是 GUID
    【解决方案2】:

    如果您创建一个开源项目,您可以将其注册到 Sourceforge 并使用 net.sourceforge.myproject。这在许多 Java 项目中很常见。一个例子是 PMD http://pmd.sourceforge.net/

    【讨论】:

      【解决方案3】:

      web 上找到关于这个主题的好建议:“用你的电子邮件地址开始你的包名称,颠倒。[...]或者,将你的代码托管在一个网站上,这会给你一个他们的域名。”

      【讨论】:

      • 我对该建议的问题是,您正在使用您实际上不拥有或无法控制的域的子域。如果发生冲突(尽管不太可能),那你就完全错了。
      【解决方案4】:

      请注意,“反向域名”只是一个约定:很有用,因为如果每个人都遵守它,它肯定会避免冲突,但您不必遵循它。

      只需选择一个您可以合理确定其他人不会使用且未被任何人注册为商标的名称 - 因为这是您真正可能陷入法律麻烦的一种方式。

      这意味着实际上使用您正在使用的免费服务的某种“子域”是一个相当糟糕的主意,例如 deviantart 或 dyndns 或免费邮件服务!因为这些域中的大多数(如果不是全部)都是商标术语,并且如果您的项目得到广泛分发,则可能被视为违反商标。仅仅因为他们允许您将该名称用作电子邮件地址(或其他)并不意味着您可以将其用于其他任何事情 - 事实上,他们的 EULA 几乎可以肯定地将使用限制在一个目的上。

      【讨论】:

        【解决方案5】:

        为什么不注册一个域?

        它们相当便宜,这样做可以保证您不会与其他任何人发生冲突(或者至少让您感到满意,即如果确实发生冲突,则必须由其他人重写他们的代码)。

        要么注册你自己的名字,要么试着编一个你以后可以用作业务基础的名字。

        • bernard.surname.net
        • madeupname.net

        这将使您每年花费不到 10 英镑。

        就我个人而言,我会选择假名的方法,因为它可能看起来更专业(除非你选择了非常奇怪的东西)。

        另一个优势是很多域都带有电子邮件功能,为您提供比 bernard.surname@hotmail.com 更好的电子邮件地址。

        【讨论】:

        • 公平地说,它确实意味着其他人将不得不更改他们的包名。命名包没有规则,倒转域名只是Java文档推荐的东西。
        • 即使您限制自己使用域名,也不能保证唯一性。没有什么可以阻止其他人使用他们不拥有的域,即使每个人都一致同意只使用他们拥有的域,这仍然不够 - 有人可能在你之前拥有该域并发布了一个包,或者有人最终可能会在您之后拥有该域并发布一个包。
        • 一个由 5 个随机字母组成的简单方案(例如 mzcrs.pwkcy)可能是独一无二的 - 根据我的数学,您需要大约 500 万个包裹才能接近碰撞的可能性10%(50% 为 1400 万)。而且,当然,您可以通过使用更多字母来进一步降低机会。是的,它仍然不能保证唯一,但也不能使用域名。
        • 购买域名之类的东西只是为了在 Java 中用作包名似乎是个糟糕的主意。没有其他语言会遭受如此奇怪的资金使用。 “相当便宜”是相当主观的。
        【解决方案6】:

        您还可以通过诸如 DynDns(或其中一个等价物)之类的服务注册一个域(实际上是一个子域),然后使用该域名。您将成为唯一的控制器,它免费且易于维护。他们目前有 88 个顶级域名可供选择(2008 年 10 月)。 dyndns dynamic dns service

        【讨论】:

        • 自发布此答案以来的十年中,dyndns 已付费。
        • 一个不错的免费替代 dyndns 是 freedns.afraid.org,多年来一直在使用它。
        【解决方案7】:

        当我没有命名空间时,对于我自己的个人工作,我会选择像org.<myname>.* 这样简单的东西

        【讨论】:

          【解决方案8】:

          我曾在几家不同的公司工作,他们编写内部 Java 类。通常他们只是com.blah.blah.blah,而不考虑它背后是否有一个实际的域名。

          【讨论】:

            【解决方案9】:

            恕我直言,最好不依赖任何外部信息,例如托管服务提供商或公司(它可以发布到开源社区),因为包级别的重构不是很理想,尤其是在框架的情况下和图书馆。我建议您仔细且明确地选择您的项目名称,然后使用 org. 作为根包。

            【讨论】:

              【解决方案10】:

              许多人都有自己的网站和相对独特的名称(或登录名)。

              如果您的名字是 Bernard Something,您可能拥有 BernardSomething.com, 使 com.bernardsomething.xxxx(或 com.bsomething.xxx)成为个人代码的合法包名恕我直言。

              话虽如此,如果您的项目名称是唯一的,您可能希望在此之后命名包。

              当然,如果您还没有域名,请在您的名字后面获取域名!

              【讨论】:

                猜你喜欢
                • 2011-01-16
                • 1970-01-01
                • 2011-11-10
                • 2011-10-30
                • 1970-01-01
                • 1970-01-01
                • 2012-06-24
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多