我该如何命名我的Java 9模块?

Zhe*_*lov 24 java java-9 java-module

假设我有一个带groupId = org.abc和的库artifactId = myLibrary.模块名称的推荐名称是什么:myLibraryorg.abc.myLibrary?是否有任何命名方案的官方指南?

Nic*_*lai 33

有一段时间,对于您的问题有两种不同的意见,但在模块系统的开发过程中,社区采用了反向DNS方法.

唯一模块名称 - 反向DNS

这里假设模块名称应该是全局唯一的.鉴于这一目标,最实用的方法是遵循包命名策略并反转维护者所关联的域名.模块系统状态说:

模块名称(如包名称)不得冲突.命名模块的推荐方法是使用长期推荐用于命名包的反向域名模式.

此外,Mark Reinhold 写道:

强烈建议根据反向Internet域名约定命名所有模块.模块的名称应该与其主要导出的API包的名称相对应,该API包也应遵循该约定.如果模块没有这样的包,或者由于遗留原因,它必须具有与其导出的包之一不对应的名称,那么其名称至少应该以作者的反向形式开头.已关联的.

这一点非常清楚,并由Stephen Colebourne等其他Java专家共享.

模块大于工件

有一段时间(2016年初)有另一个建议进行轮次.JDK团队表示模块名称可能不一定是唯一的"因为模块比定义它们的工件更抽象".Mark Reinhold写道:

选择以项目或产品名称开头的模块名称.与反向域名启动模块(和包)的名字是不太可能的冲突,但他们不必要的冗长,他们开始用最少的重要信息(例如,com,orgnet),他们外生变化后不读好例如开源捐赠或公司收购(例如com.sun.*).

在我们拥有足够复杂的开发工具来帮助我们处理偶尔的冲突之前,反向域名方法在Java的早期是明智的.我们现在有这样的工具,因此,从项目或产品名称开始的短模块和包名称的优越可读性优于那些以反向域名开头的繁琐冗长.

此外,拥有不包含域的模块名称将允许将该模块与另一个实现交换,只要它具有相同的名称(并且当然实现相同的公共API).

在上面的邮件中,Reinhold记录了他的意见变化:

有些人可能更喜欢较短的,面向项目的名称,而这些名称可以在有限的项目中使用,这些项目永远不会在单个组织之外看到光明.但是,如果您创建的模块将来很少有机会开源,那么最安全的方法是在开始时为它选择反向DNS名称.

摘要

陪审团参与其中,所有公开发表意见的人都同意反向DNS,就像包裹一样.

  • 所以.如果反向域名模式首先放置最不相关的信息,那么反向反向域名模式如何;-) FancyModule.oracle.com (5认同)
  • 短模块名称的好处:将自动模块转换为显式模块后,名称不会改变。但即便如此,我也更喜欢独特的名字。 (2认同)

Zhe*_*lov 5

我想我们得到了Mark Reinhold的“官方”回答

强烈建议所有模块都按照反向 Internet 域名约定命名。模块的名称应与其主要导出的 API 包的名称相对应,该名称也应遵循该约定。如果一个模块没有这样的包,或者由于遗留原因它必须有一个与其导出的包之一不对应的名称,那么它的名称至少应该以作者所用的 Internet 域的反向形式开头已关联的。