【问题标题】:Am I conventionally expected to use a com folder in my java project? [duplicate]我是否通常希望在我的 java 项目中使用 com 文件夹? [复制]
【发布时间】:2019-06-13 14:48:58
【问题描述】:

编辑:让我从我的原始帖子中取出一个句子并将其放在顶部以粗体显示,这样就不会被标记为重复:

我了解“com”的由来(Sun 将其设置为反向使用您的 TLD 等的约定,因此您有一个唯一的包名称),此时我想知道的是普通按照惯例,没有 TLD 可言的独立开发者仍然希望创建一个封装的顶级 com 文件夹只是以满足该约定。

例如,我目前将我的 java 文件包含在一个名为 JavaProject 的目录中。我想这也使当前的包名称JavaProject。除了看起来“正常”之外,我是否需要将JavaProject 目录放在父com 目录中?据我所知,它似乎没有任何实际用途。我错了吗?

请注意,我现在没有使用像 Eclipse 这样的 IDE,我只是在使用文本编辑器和命令行并手动创建我的文件和包。

【问题讨论】:

  • 注意:(常规)目录结构遵循包名,而不是相反。包名来自 Java 源文件中的 package 语句,与源文件位置无关。
  • @JohnBollinger 谢谢你提出这个问题,我真的很想知道这一点。但这不等于同一件事吗?您仍然希望有一个与包名称匹配的目录结构,不是吗?
  • @temporary_user_name,仅当您以相对于内部 package 语句的常规方式布置文件时,它才等同于相同的事情。这使很多事情变得更容易,但这不是必需的。请注意,这是对“我猜这也使当前包名称为 JavaProject”的回应,因为 no,您的源代码所在的目录并不是决定哪个包里面定义的类属于。 (这也是一件好事,因为“JavaProject”是一个绝对可怕的包名——太笼统了,而且使用了非常规的大写。)
  • 是的,当然,理解,这只是为了我自己在我的桌面上跟踪事物。谢谢。
  • 引用副本上的其中一个 cmets(恕我直言,这是重复的):“我见过人们使用他们的 GitHub 用户名作为他们的域,例如:com. guthub.pwagland.xxx [原文如此] 主要目的是获得一个唯一的名称,这样您就不必更改它,并且它永远不会与其他人选择的名称冲突。- Paul Wagland 2016 年 12 月 24 日7:19”

标签: java package


【解决方案1】:

对于包名的第一段没有专门使用com 的约定。事实上,Java 标准库本身并没有这样做。即使您将考虑范围仅限于由确实拥有 TLD 的第三方组织生产的软件包,它们也并不总是以 .com 结尾。事实上,特别重要的是 .org TLD,例如 Apache 项目的。

总体而言,

  • 选择一个独特的包名。不一定非要有多个细分。
  • 如果您不打算将其基于反向域名,那么不要comorg 或任何其他可能与反向域名。
  • 选择了包名称后,按照该名称的常规布局排列您的源代码。遵循该布局并不是绝对必要的,但它会为您节省很多痛苦。许多工具都期望这种布局,或者至少最适合它。

【讨论】:

  • 显然我已经达到了我的每日投票上限,现在实际上无法投票,这很有趣。这是以前从未发生过的。
  • Sun(当时)和 Oracle(现在)仍然坚持包应以反向域名作为前缀的约定(另请参阅“包名称和模块名称”下的 JLS Java 11, section 6.1)。 java.*javax.* 包不遵循该约定的事实是规则的一个例外,因为它们定义了标准的 Java 和 Java EE 包。这不是打破常规的租约。
  • @MarkRotteveel,我说过约定不是专门使用com 作为包名的第一段。无论是根据 JLS 还是根据惯例,它都不是,标准库提供了反例是相关的。 JLS 中描述的约定要求您有一个 TLD 来作为包名称的基础,问题归结为如果您实际上没有 TLD 可以使用,该怎么办。实际上,我已经回答遵守约定的目的:避免包名冲突。
  • 我同意,我赞成你的回答,但我发表了我的评论,因为有人可能会误读你回答的那一部分,就好像仅仅因为 Java 而选择任何名称是“免费的”它自己也这样做,而 Java 是该规则的故意例外(使用反向域的约定)。
猜你喜欢
  • 1970-01-01
  • 2012-07-09
  • 1970-01-01
  • 2015-03-20
  • 2014-09-13
  • 2018-08-02
  • 1970-01-01
  • 1970-01-01
  • 2011-02-04
相关资源
最近更新 更多