假设我正在使用像
library-package.LibraryClass
这样的库类。
package library.package;
class LibraryClass {}
我研究了它的实现,出于我的应用目的,我想稍微修改一下该类,然后使用。我的应用程序有包
application-package
。
package application.package;
class ApplicationClass {}
我应该如何命名应该存储该类
LibraryClass
的包?我应该在我的项目中重用library-package
还是应该使用方案application-package.library-package
,因为我记得我也遇到过这样的方案。
第一个
src\main\java\application\package
src\main\java\library\package
第二个
package application.package.library.package;
class LibraryClass {}
我认为这可能归结为意见,但让我们提取手头的事实:
application.package.library.package
命名约定来表达“你是这个类的所有者”。
我个人使用这样的方案:
tschallacka.magiccookies.util.math
tschallacka.magiccookies.util.time
tschallacka.magiccookies.graphics.model
等等...
所以你有自己的“域名”
tschallacka
magiccookies
util
用于我的实用程序类,
graphics
用于我的 3D 图形类。然后我喜欢通过为该包中的工具类型添加特定包来指定更多信息,
math
用于数学相关类,
time
用于日期和时间,
model
用于我的所有图形模型辅助函数。基本上这取决于您,以及您希望使用什么风格来组织代码。
大多数编码员都遵守一些准则/约定
命名约定包名全部小写,避免与包名冲突 类或接口的名称。
公司使用反向互联网域名来开始他们的业务 包名称 - 例如,名为 com.example.mypackage 的包 mypackage 由 example.com 上的程序员创建。
需要处理单个公司内部发生的名称冲突 按照该公司内部的惯例,也许可以包括该地区或 公司名称后面的项目名称(例如, com.example.region.mypackage).
https://docs.oracle.com/javase/tutorial/java/package/namingpkgs.html
package <lib-package>
Junit 使用
hamcrest 执行此操作,但这可能会导致问题,因为它本质上是一个分叉,并且您绑定到特定版本。 如果您使用以下约定,则可以避免此问题。
package my.tld.<lib-package>
由于您看起来本质上是
forking 原始项目,我建议您使用相同的约定。
但是,您应该考虑使用将工件上传到中央存储库的指南:
- 我在 foo.com 上开发了 foo 项目的修补版本,我应该使用什么
groupId
?当您修补/修改第三方项目时,该修补版本将成为您的项目,因此应在您控制的
groupId
下分发,就像您将开发的任何项目一样,而不是在com.foo
下分发。请参阅上面关于groupId
的注意事项。