我最近开始使用Eclipse IDE并且在许多地方读过一个不应该使用默认(src)包并创建新包的地方。 我只想知道背后的原因。
使用默认包可能会创建命名空间冲突。想象一下,你正在创建一个包含MyClass
类的库。有人在他的项目中使用你的库,并且在他的默认包中也有一个MyClass
类。编译器应该怎么做? Java中的包实际上是一个完全标识您的项目的命名空间。因此,不要在现实世界项目中使用默认包很重要。
最初,它旨在确保不同Java代码片段之间不存在冲突。
因为Java意味着可以在任何地方运行,并且通过网络运行(意味着它可能从Sun,IBM甚至Joe Bloggs和Dodgy Software Company Pty Ltd获得),我拥有paxdiablo.com
的事实(我实际上并不是让我假装我这样做是为了这个答案)意味着我可以安全地调用我的所有代码com.paxdiablo.blah.blah.blah
并且不会干扰其他任何人,除非他们在某种程度上在精神上有缺陷并使用我的命名空间:-)
来自chapter 7, "Packages", of the Java Language Spec:
程序被组织为一组包。每个包都有自己的类型名称集,这有助于防止名称冲突。
实际上,我通常首先使用默认包,然后将它移动到一个真正的包(如果它能够很容易地用Eclipse IDE完成),如果它存活的时间足够长,可以发布到野外。
Java使用该包作为区分类的方法。通过使用包,您可以拥有一个org.example.Something类和一个org.example.extended.Something类,并且能够区分它们,即使它们都被命名为Something。由于它们的包不同,您可以在同一个项目中使用它们。
通过声明一个包,您可以定义自己的命名空间(对于类)。这样,如果您有两个相同的类使用不同的包名(命名空间)将区分您要使用的类。
我能想到的主要原因是:
从Java的角度来看,您可以使用两个常规开发/部署生命周期,使用ant构建和部署,或者使用maven生命周期。这两个生命周期都在本地目录中查找源代码和资源,在maven的情况下,在本地目录或网络中查找定义的存储库。
关键是,当您设置项目,进行开发和最终部署时,您希望构建一个可移植的项目结构,而不依赖于IDE,即。您的项目可以使用任一构建环境构建和部署。如果您过度依赖Eclipse框架来提供类变量,编译路径等,您可能会遇到项目只使用该配置构建和部署的问题,并且可能无法移植到其他开发人员环境,可以这么说。