12

我正准备实施一个源代码控制系统(颠覆),但我对如何构建我的文件夹有一些疑问。

我使用 Delphi 进行所有开发,并从 IDE 中编译项目。

我当前的项目文件夹结构如下:

-E:\工作\1。共享
--Forms(所有项目的共享表单)
--Units(所有项目中的共享单元/类,包括 JCL 等第 3 方)

-E:\工作\2。公司名
--Admin(与管理工作相关的东西,如许可证密钥生成器、自动处理订单处理的 Windows CGI,全部在 Delphi 中开发)
--项目
----项目A
-----5.x(版本 5.x)
------BIN(该项目的所有二进制文件所在的位置)
------Build Manager(FinalBuilder 项目所在的地方)
-------安装(创建 setup.exe 的 NSIS 文件)
--------Protection(项目文件保护已编译的exe)
--------更新(自动更新相关的inf文件)
------Docs(安装文件中包含的readme.txt、license.txt和history.txt在哪里)
--------缺陷(我或其他人进行的任何测试的文档)
--------HTMLHelp(项目的html帮助)
------研发(截图,设计理念和其他研发的东西去哪里)
------Releases(使用 FinalBuilder 构建版本时,nsis 创建的设置文件放在此处)
------资源(本项目使用的图像和其他资源)
------Source(如果存在子项目,它将编译为 BIN,因为它们都是相关的)
--------子项目A
--------子项目B
--------子项目C
--网站
--- companywebsite.com(目前唯一的一个,但如果我们决定为产品建立单独的网站,它们都将放在站点文件夹中)

符号“-”标记目录。

有人关心对当前结构发表评论或有任何改进建议吗?

谢谢!

4

2 回答 2

30

多年来建立了数百个项目,并且专注于软件配置管理和发布工程,我建议您首先关注您希望如何构建/发布您的项目。

如果您只使用 IDE 来构建(编译和打包)您的项目,那么您不妨遵循该 IDE 的典型约定,以及您可能找到的任何“最佳实践”。

但是,我强烈建议您不要仅使用 IDE 构建,甚至根本不要构建。相反,使用许多可用的出色开源工具中的一种或多种来创建自动构建/发布脚本。由于您的目标似乎是 Windows,因此我建议您先查看 Ant、Ivy 和适当的 xUnit(用于 Java 的 jUnit、用于 .NET 的 nUnit 等)进行测试。

一旦你开始走这条路,你会发现很多关于项目结构、设计构建脚本、测试等方面的建议。现在我不会用详细的建议让你不知所措,我只会把这些建议留给你——你会很容易找到答案在那里你的问题,以及找到更多值得调查的问题。

享受!

根据评论,似乎需要一些细节。

我要提出的一个特别建议是将代码库分成单独的子项目,每个子项目都产生一个可交付成果。主应用程序(.EXE)应该是一个,任何支持的二进制文件都是单独的项目,安装程序将是一个单独的项目,等等。

每个项目产生一个单一的主要交付物:一个.EXE、一个.DLL、一个.HLP 等。该交付物被“发布”到一个单一的、共享的、本地的输出目录。

创建一个目录树,其中子项目是对等的(没有深度或层次结构,因为它没有帮助),并且不要让项目“到达”彼此的子树 - 每个项目应该完全独立,仅依赖于主要可交付成果共享输出目录中引用的其他子项目。

不要创建相互调用的构建脚本的层次结构,我这样做并发现它不会增加价值,但会成倍增加维护工作。相反,制作一个调用独立构建脚本的持续集成脚本,但首先将干净的签出到临时目录中。

不要将任何可交付成果或依赖项提交到源代码控制中——不是您的构建输出,也不是您使用的库等。使用 Ivy 对您与源代码控制分开部署的类似 Maven 的二进制存储库,并将您自己的可交付成果发布到它用于在您的组织内共享。

哦,不要使用 Maven——它太复杂了,混淆了构建过程,因此定制起来不划算。

基于我的目标平台,我正在转向 SCons、BuildBot、Ant、Ivy、nAnt 等。

我一直在撰写关于这个主题的白皮书,我认为它可能有读者。

编辑:请参阅我对如何组织版本控制存储库的详细回答?

于 2008-11-17T20:30:40.430 回答
2

为什么是 5.x?(在项目A下)

我认为在树中引入版本没有用 - 这就是颠覆等的用途。

于 2008-11-17T19:49:05.583 回答