'src / main / java''约定的优点是什么?

时间:2010-06-09 09:52:34

标签: java coding-style conventions

我注意到很多项目都有以下结构:

  • 项目-A
    • LIB
    • SRC
        • 的java
          • RootLevelPackageClass.java

我目前使用以下约定(因为我的项目是100%java):

  • 项目-A
    • LIB
    • SRC
      • RootLevelPackageClass.java

我目前没有使用Maven,但我想知道这是否是Maven约定,或者是否还有其他原因。有人可以解释为什么第一个版本如此受欢迎,如果我应该采用这个新的约定?

克里斯

5 个答案:

答案 0 :(得分:51)

主要好处是将test目录作为src的子目录,其目录结构与main中的目录结构相同:

  • 项目-A
    • LIB
    • SRC
        • 的java
          • RootLevelPackageClass.java
        • 资源
      • 测试
        • 的java
          • TestRootLevelPackageClass.java
        • 资源

RootLevelPackageClass的所有包私有方法都是可见的,即可从TestRootLevelPackageClass开始测试。由于测试代码也是源代码,因此它应位于src目录下。

答案 1 :(得分:23)

是的,这是Maven惯例。

即使您的项目是100%Java(与Maven btw一样),您经常会有资源文件(根据Maven惯例转到src/main/resources),或Web应用程序,或者......所有这些都很容易融入Maven系统。

如果您对当前的构建系统(无论是什么)感到满意,则没有理由切换到Maven。否则,或者如果开始一个新项目,您可以评估您的选项,包括Maven。

答案 2 :(得分:12)

其他人已经告诉过你这是Maven的惯例,我会回答你的问题:

绝对没有。当然,将代码片段分开来分隔根文件夹是有益的,但通常你可以用

实现相同的功能
  • [根]
    • SRC
      • com.org.net
        • Your.class
    • 测试
      • com.org.net
        • YourTest.class
    • LIB
    • 资源

代替。事实上,这是Maven做的一件大事,实际上非常错误:它想要将二进制内容添加到源代码存储库,这仅用于文本内容!所有二进制内容都应在源代码存储库之外进行管理,包括Web应用程序中的图像等等。

但是好吧,我们假设你已经决定住在有点臭的Maven生态系统中;那么你当然应该尽可能严格遵守Maven惯例。

答案 3 :(得分:9)

它是一个Maven会议。

Maven基于Convention over configuration范例。这意味着:如果您不遵循此约定,则必须配置源所在的位置。这是恕我直言的主要好处。

答案 4 :(得分:4)

是的,这是一个maven惯例,但即使你不使用maven,使用它也有好处:

  1. 对项目不熟悉的人将会更容易加快速度,因为这是一个“标准”
  2. 此约定非常灵活,可以提供非Java代码以及此时您没有的其他内容。这是它受欢迎的一个原因,你可能会发现它比你自己想出的方案更好了
  3. 如果你想在某个时候转移到maven那将很容易
  4. 虽然我不认为你应该只是切换到开关,但是在开始一个新项目时,没有理由不使用它 - 除非你在哲学上不同意它如何破坏代码。