Apache Maven是 Java 开源生态圈中非常流行的构建和依赖管理工具。我做了一些测试,看看它是否可以处理编译的Free Pascal / Delphi 单元,并发现它很容易实现。所以有可能
- 在公共 Maven 存储库中发布为 Free Pascal(或 Delphi)预编译的开源库
- 在此存储库中包含包含依赖信息的元数据
- 在命令行使用Maven从公共仓库下载开源库,并自动解析所有依赖
- 本地存储库,作为代理,可用于缓存常用的二进制文件
- 自动校验和生成和验证(由 Maven 提供)将降低下载损坏的二进制文件的风险
- 源代码甚至文档文件都可以随二进制文件一起提供
- 可以提供带有或不带有调试信息的二进制文件
- Hudson、TeamCity或CruiseControl等持续集成服务器可用于在将更改提交到源代码控制系统时构建项目,并通知开发人员构建错误
这种依赖管理方式对于使用许多具有复杂依赖关系的第三方库的开源项目可能非常有益。它将避免使用错误版本引起的典型冲突。
对于开发人员来说,编辑和构建项目的工作流程将减少到最低限度:
- 从内部版本控制系统签出项目源代码
- 编辑源文件
- 运行
mvn package
以自动下载所有必需的第三方库(预编译单元)(如果它们尚未在工作站的本地存储库中) - 编译运行
项目文件夹中唯一需要的 Apache Maven 附加文件是包含项目信息的 POM.XML 文件。
编辑:虽然 Maven 可用于一些必需的任务,但在本机 Free Pascal 中实现像 Maven 这样的解决方案将有一些优势:不需要 Java SDK,支持所有可以使用 Free Pascal 的开发平台,在 Pascal 中进行维护和插件开发。
使用类似 Maven 的工具仅对开源项目没有帮助 - 商业项目也可以以相同的方式访问和使用公共 Maven 存储库中的工件。
Maven 特性列在http://maven.apache.org/maven-features.html
更新:
一个用例可能是 Lazarus 的构建,其中 Maven 将下载所有必需的库并使用必要的构建路径参数调用编译器。对较低级别的依赖项的更改将自动传播到父构建。
可能的好处:
- 设置新工作站所需的时间更少,无需手动安装第三方库
- 更少由错误库版本引起的错误,检测版本冲突(例如,如果两个库依赖于第三个库的不同版本)
- 内部创建的工件可以添加到本地 maven 存储库并在开发人员和项目之间共享,所有工件与元数据的中央存储
- 构建是可重现的,只需使用相同的源和项目元数据文件 (pom.xml)
- 可以减少开发时间并增加项目稳定性
更新#2:FPMake
Free Pascal的FPMake构建系统似乎是一个很有潜力的工具,在许多细节上它与 Maven 非常相似:
- FPMake 是为 FPC 开发和分发的基于 Pascal 的构建系统
- FPMake 通过定义一些限制(如标准目录)来标准化构建
- 该命令
fppkg <packagename>
将在数据库中查找包,将其解压缩,然后编译 fpmake.pp 并运行它 - 它有标准的构建目标(清理、构建、安装……)
- 它可以创建一个适合导入存储库的“清单”文件(如
mvn deploy
或mvn install
),清单是一个 XML 文件,看起来非常类似于 Maven 中的 pom.xml:
FPMake清单文件:
<packages>
<package name="my-package">
<version major="0" minor="7" micro="6" build="1"/>
<filename>my-package-0.7.6-1.zip</filename>
<author>my name</author>
<license>GPL</license>
<homepageurl>http://www.freepascal.org/</homepageurl>
<email>myname@freepascal.org</email>
<description>this is the package description</description>
<dependencies>
<dependency>
<package packagename="rtl"/>
</dependency>
</dependencies>
</package>
</packages>