Java项目的包结构?


116

在Java Web应用程序中设置包结构的最佳实践是什么?

您将如何设置src,单元测试代码等?

Answers:


95

您可以遵循maven的标准项目布局。您不必实际使用Maven,但这会使将来的过渡更加容易(如有必要)。另外,由于许多开源项目都是以这种方式进行布局的,因此其他开发人员将习惯于看到这种布局,


2
如果您可以选择的话,我也建议使用Maven的布局。这是经过深思熟虑的经过深思熟虑的结构,许多开发人员都很熟悉。
Dov Wasserman

15
您可以使用此oneliner创建目录布局:mkdir -p src / {main / {java,resources,filters,assembly,config,webapp},test / {java,resources,filters},site}
Daniel Hepper

1
Maven的标准项目布局很难看……:/
Yousha Aleayoub

2
@YoushaAleayoub你不必嫁给它
Ashvin Sharma

59

您可以检查一些现有资源:

  1. 正确打包您的Java类
  2. Spring 2.5体系结构
  3. Java教程-命名软件包
  4. SUN命名约定

就其价值而言,我倾向于使用的个人指导原则如下:

  1. 从反向域开始,例如“ com.mycompany”。
  2. 使用产品名称,例如“ myproduct”。在某些情况下,我倾向于拥有不属于特定产品的通用包装。这些最终将根据这些常见类的功能进行分类,例如“ io”,“ util”,“ ui”等。
  3. 此后,它变得更加自由形式。通常,我根据项目,功能区域,部署等进行分组。例如,我可能具有“ project1”,“ project2”,“ ui”,“ client”等。

其他几点:

  1. 在我从事的项目中,包装名称从设计文档中提取出来是很常见的。通常,产品已经分为功能或用途领域。
  2. 不要过分强调立即将通用功能推入更高的程序包中。等待项目,产品等之间的需求,然后进行重构。
  3. 观察包间依赖关系。它们并不全都不好,但可以表示可能是独立单元之间的紧密耦合。有一些工具可以帮助您跟踪此情况。

2
在反向域情况下(“ com.mycompany”),除了“ mycompany”子包之外,“ com”包通常是空的吗?
亚历克斯·帕克

45

我建议您按功能而不是按实现层创建包结构。Java做法很好地写下了这一点:按功能而不是按层打包


2
谢谢。这就是我想要传达给团队的想法
Pranalee 2013年

8
如果要切换数据库?只需查看30种不同的包装。从SFTP迁移到Web服务?再次只需查看30个不同的地方。绝对不是粉丝。
SamuelKDavis 2014年

1
另一个按层打包有好处的示例:如果将类序列化为JSON(例如,使用gson),如果这些类被混淆(例如,通过Proguard),则反序列化将失败;您需要配置Proguard使其不涉及此类-这是最简单的方法,即指定所有类都使用单个软件包
jmuet 2014年

6

我通常喜欢以下内容:

  • bin(二进制文件)
  • doc(文档)
  • inf(信息)
  • lib(图书馆)
  • res(资源)
  • src(来源)
  • tst(测试)

这些可能被认为是非常规的,但是我发现这是组织事物的一种非常好的方法。


“这些可能被认为是非常规的”顺便说一句,它们实际上是非常规的并且是坏的……
mahieddine

2
@mahieddine您为什么认为它们不好?
托马斯·

好吧,不是我这么说的,但这是我的一些想法:您的测试类是源代码,因此目录“ tst”(大多数人不缩写test btw)应该是src的子目录(例如“ src”变成“ src / main”,“ tst”变成“ src / test”)。同样,“ inf”似乎包含可能在“ doc”中的内容。
Nico Wawrzyniak

6
The way I usually organise is
- src
        - main
                - java
                - groovy
                - resources
        - test
                - java
                - groovy
- lib
- build
        - test 
                - reports
                - classes
- doc

3

我通常使用文件夹层次结构的方式-

  • 项目名称
    • src
    • 箱子
    • 测试
    • docs

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.