Java包理解现实生活中的项目

时间:2014-04-04 15:19:57

标签: java jar packaging software-packaging

我想了解真实大项目中的包装方法。

假设我们有一个包com.abc.xyz,为此,我们确实有一个像com / abc / xyz这样的路径。

是否可以在不同的目录结构中具有多个相同的包名称,如:

目录路径1: /主页/用户1 /项目/模块1 / src目录/ JAVA / COM / ABC / XYZ

目录路径2:

/主页/用户1 /项目/模块2 / src目录/ JAVA / COM / ABC / XYZ

最后,当我们为整个项目创建jar时,我们是否就com目录创建了jar?

当某些应用程序使用import com.abc.xyz时,它如何知道它所引用的目录路径包?

最后,是否有任何好的书/资源可以提供有关包装,如何将项目划分为模块,包名等的指导。

还有一件事,一个项目是否具有常见的包基名称,如上例所示: com.abc.xyz(例如,org.apache.hadoop)。

谢谢, Vipin

4 个答案:

答案 0 :(得分:4)

就类加载器而言,在不同源目录中创建的包是相同的包。如果类文件在同一个jar或不同的jar中也没关系。 JVM不会根据源代码的来源进行区分。 (当然,如果你有两个由不同类加载器加载的罐子,那么它们将被区别对待。)

你经常拥有相同包的不同源树的一种情况是当你在不同的目录中进行测试时(使用通常的Maven约定,其中代码在src / main / java下,测试在src / test /中) java)但与他们运用的代码具有相同的包。这些测试能够运行受测试代码的受保护和包私有部分,因为它们与该代码位于同一个包中。

jar中目录的路径应该从包的根目录开始。 (最顶层的目录应该是/,然后是一个名为com或org或者其他的东西等。)包形成一个树状结构,当你把你的代码放在一个文件系统中时,你最终会有一个包的层次结构,但语言本身并没有认识到" subpackage"的概念。 (除了以java开头的包是特殊的并且由类加载器获得特殊处理)。

将代码组织到包中的方式因人而异。有些人喜欢逐层组织代码(将所有控制器放在一个包中,所有服务放在另一个包中,所有服务放在另一个包中),有些人喜欢按功能组织代码。

逐层是组织代码的传统方式,它似乎是Java社区中的首选实践。这样做的一个结果是,当代码将一个特征实现为与包结构成直角的垂直切片时(因为它可能需要一个新的控制器端点,可能是一个新的服务方法等),所以密切相关的代码位为相同的功能最终分散在不同的目录中。 The Java Practices website makes an interesting case for package-by-feature

  

按功能打包逐个功能使用包来反映   功能集。它会尝试将所有与单个项目相关的项目放置   功能(仅限该功能)到单个目录/包中。这个   结果是具有高内聚力和高模块性的包装,并且具有   包之间的最小耦合。紧密合作的项目   彼此相邻。它们并没有遍布全世界   应用。值得注意的是,在某些情况下,   删除功能可以减少为单个操作 - 删除   目录。 (删除操作可能被认为是一个很好的测试   最大模块化:项目只有在可以的情况下才具有最大的模块性   在一次操作中删除。)

这是一个问题asking about package by feature or layer

答案 1 :(得分:2)

是的,你可以在不同的目录中制作重复的包,但我不能想出这样做的好理由。如果包中的类具有相同的名称,则肯定会发生命名空间冲突。我不确定"模块"在这种情况下意味着但我建议

  • com.abc.module1.xyz
  • com.abc.module2.xyz

代替。这些将是类加载器的不同包。您仍然可以预先保留/ home / user1 / project / module1 /目录结构,这并不重要。

答案 2 :(得分:1)

从2个模块中,您将拥有两个单独的jar文件:module1.jarmodule2.jar。应用程序启动时,两者都将加载到ClassLoader中。

  

当某些应用程序使用import com.abc.xyz时,它如何知道它所引用的目录路径包?

Classloader将处理它。 http://www.javaworld.com/article/2077260/learn-java/the-basics-of-java-class-loaders.html

如果您尝试开发多模块应用程序,我建议您检查Maven工具:

http://maven.apache.org/

Why maven? What are the benefits?

有关包装组织的指导,您只需google'java packages'短语。 http://www.tutorialspoint.com/java/java_packages.htm

答案 3 :(得分:1)

https://www.facebook.com/Niranthara-Jaya-JavaSocial-Media-Apps-Software-Project-Management-244119296136021/

此页面适用于希望了解如何使用真实Java项目的人员。发送消息到这个页面并查看文章。