如何组织更大的Java项目 - 项目与命名空间?

时间:2011-09-13 14:33:09

标签: java

我想知道是否有关于如何组织更大的Java项目的推荐阅读,最佳实践或意见。

我观察到有些人将所有内容分成项目(即模块),并创建了许多共享依赖网络的项目。这样做的好处是编译通常非常快,但是当项目变大时,没有人知道什么取决于什么和为什么。不是谈论依赖库,版本冲突和共

替代方案是只有几个项目,如前端,后端,....命名空间完成了这项工作。

任何意见,进一步阅读任何人都可以推荐?

3 个答案:

答案 0 :(得分:5)

一旦开始将大型项目拆分为较小的项目,就会遇到很多依赖性跟踪,而这些跟踪通常不需要考虑。您可以自己管理,也可以使用已经处理过许多核心问题的软件。

I would recommend Apache's Ivy。它与Apache的Ant集成得很好,并且有一个单独的配置文件(可以检入)以跟踪每种构建所需的内容。

Apache的Maven是另一个不错的选择;然而,它比Apache的Ivy做得更多。有时候“更多”意味着你做的事情要少得多,有时候“更多”意味着你正在做(和配置)你以前没做过的事情。根据您对Maven的练习的适合性,迁移到Maven可能很容易或非常困难。

此外,使用Ivy,您可以设置自己的“允许”jar文件的私有存储库,这将使代码审计变得更加容易。基本上,将常春藤重新配置为不从网络中提取,而是仅从本地存储库中提取,然后控制对存储库的访问,以仅允许经过审核的jar文件具有可接受的许可。

一旦有了软件,就可以将项目分成更小的部分。这将允许你做正确的事情(如果你的项目有利于小分解)而不是权宜之计(一些可能在分解可维护性方面没有太多帮助的大块)。至于切割的位置,这在很大程度上取决于您的应用程序的具体情况。

许多小件往往更容易让新人一个接一个地消化。他们还让人们思考将功能添加到项目中的位置;但是,解决和分离所有组件需要花费时间和精力。优点是,通常更容易测试和验证更小的东西,缺点是将一个单一的职责集合分解为许多小型,集成良好但功能完全不同的单元是一条较长的道路。

祝你好运

答案 1 :(得分:3)

一个非常大的项目需要有一些方法来跟踪它使用的所有库和其他依赖项。这样做的事实标准是Maven。这绝对是开始跟踪应用程序内容的最佳方式。

然后您可以决定如何拆分您的应用程序。基本上,您在这里要做的就是将您的应用程序拆分为完整的功能部分。例如,如果您的网站有联系表单,照片库,购物车和论坛,您可以将项目拆分为包含每个不同模块的部分。

答案 2 :(得分:1)

实际上,您需要同时使用项目和命名空间。

命名空间是一种重要的工具,用于区分代码在代码级别的用途。无论一个类来自哪个项目,该包都应该让我对它的目的有所了解。

在更高级别,通过将代码分成项目,可以更轻松地管理构建和开发环境。例如,如果您正在开发UI,为什么需要将数据库代码加载到IDE中?它只是你的工作区中的杂乱。它还使在不同项目之间共享通用功能变得更加简单。这当然会导致需要某种形式的依赖管理,其中任何一种提到的工具,如Maven或Ivy就足够了。

虽然重要的一点。不要在项目之间使用拆分包。如果您或任何将使用您的代码的人想要在OSGi环境中这样做,这会导致噩梦。因此,您的名称空间在项目中应该是唯一的,尽管它们应该与其他相关项目共享一个公共根目录。