Apache Maven是Java开源生态系统中非常流行的构建和依赖管理工具。我进行了一些测试,以找出它是否可以处理编译的Free Pascal / Delphi单元,并发现它很容易实现。因此,这是可能的。
- 发布已经编译好的开源库,适用于Free Pascal(或Delphi),并存放在公共Maven仓库中
- 在该仓库中包含元数据,其中包含依赖信息
- 使用命令行上的Maven从公共仓库中下载开源库,并自动解决所有依赖项
- 本地仓库可以作为代理使用,以缓存经常使用的二进制文件
- Maven提供的自动生成和验证校验和功能可以减少下载损坏二进制文件的风险
- 可以与二进制文件一起提供源代码甚至文档文件
- 二进制文件可以带有或不带有调试信息
- 连续集成服务器如Hudson,TeamCity或CruiseControl可以在提交更改到源代码控制系统后构建项目,并通知开发人员有关构建错误的信息
这种依赖管理方式对于使用许多具有复杂依赖关系的第三方库的开源项目非常有益。它将避免因使用错误版本而导致的典型冲突。
对于开发人员来说,编辑和构建项目的工作流程将被减少到最低限度:
- 从内部版本控制系统中检出项目源代码
- 编辑源文件
- 运行
mvn package
以自动下载所有所需的第三方库(预编译单元),如果它们尚未在工作站的本地存储库中 - 编译并运行
在项目文件夹中所需的唯一附加文件是包含项目信息的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
FPMake Free Pascal的构建系统似乎是一个具有很大潜力的工具,在许多细节上它与Maven非常相似:
- FPMake是一个基于Pascal的构建系统,为FPC开发和分发
- 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>