Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我应该如何命名Java 9模块?_Java_Java 9_Java Module - Fatal编程技术网

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

我应该如何命名Java 9模块?,java,java-9,java-module,Java,Java 9,Java Module,假设我有一个带有groupId=org.abc和artifactId=myLibrary的库。模块名称的建议名称是什么:myLibrary或org.abc.myLibrary?是否有命名方案的官方指南?有一段时间,对您的问题有两种不同的看法,但在模块系统的开发过程中,社区决定采用反向DNS方法 唯一模块名称-反向DNS 这里,假设模块名称应该是全局唯一的。考虑到这一目标,最实用的方法是采用包命名策略,并反转与维护人员相关的域名 模块名称与包名称一样,不得冲突。命名模块的推荐方法是使用反向域名模式

假设我有一个带有
groupId=org.abc
artifactId=myLibrary
的库。模块名称的建议名称是什么:
myLibrary
org.abc.myLibrary
?是否有命名方案的官方指南?

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

唯一模块名称-反向DNS 这里,假设模块名称应该是全局唯一的。考虑到这一目标,最实用的方法是采用包命名策略,并反转与维护人员相关的域名

模块名称与包名称一样,不得冲突。命名模块的推荐方法是使用反向域名模式,这种模式长期以来一直被推荐用于命名包

此外,马克·莱因霍尔德:

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

这一点非常清楚,其他Java专家也有同感

模块大于工件 有一段时间(2016年初),有另一项建议正在进行轮次。JDK团队表示,模块名称可能不必是唯一的,“因为模块比定义它们的工件更抽象”

选择以项目或产品名称开头的模块名称。以反向域名开头的模块(和包)名称不太可能发生冲突,但它们不必要地冗长,它们以最不重要的信息(例如,
com
org
、或
net
)开头,而且在开源捐赠或公司收购等外部变化后,它们的可读性不好(例如,
com.sun.*

在Java的早期,反向域名方法是明智的,在我们拥有足够成熟的开发工具来帮助我们处理偶尔的冲突之前。我们现在有这样的工具,因此与繁重的ve相比,以项目或产品名称开头的短模块和包名具有更高的可读性更可取以反向域名开头的域名的有效性

此外,如果模块名不包含域,则允许将该模块与另一个实现进行交换,只要它具有相同的名称(当然,实现了相同的公共API)

在上面一行行的邮件中,莱因霍尔德记录了他的观点变化:

有些人可能更喜欢较短的、面向项目的名称,这些名称可以在有限的项目中使用,这些项目永远不会在单个组织之外看到曙光。但是,如果您创建的模块在将来甚至有很小的机会成为开源模块,那么最安全的做法是在t他开始了

总结 陪审团已经就位,所有发表意见的人都同意对包裹使用反向DNS。

我想我们从Mark Reinhold那里得到了一个“官方”消息:

强烈建议根据反向Internet域名约定对所有模块进行命名。模块名称应与其主要导出API包的名称相对应,该名称也应遵循该约定。如果模块没有此类包,或者由于遗留原因,其名称必须与其中一个导出的包,则其名称至少应以作者关联的Internet域的反向形式开头


短模块名的好处:将自动模块转换为显式模块后,名称不会改变。但即使如此,我也更喜欢唯一的名称。这是基于JAR使用Maven的工件ID作为文件名的假设。如果开发人员在“唯一模块名”方面做得足够多camp,她可能想告诉她的工具重命名该文件。因此,如果反向域名模式将最不相关的信息放在第一位,那么反向域名模式如何;-)FancyModule.oracle。com@Nicolai不确定将具有完全限定名的jar上传到maven central是否是一个好主意,这意味着在将它们放到模块路径之前在本地进行。