Apache Maven可以免费获得Pascal的好处吗?

mjn*_*mjn 9 delphi build-automation freepascal maven fpmake

Apache Maven是Java开源生态圈中非常流行的构建和依赖管理工具.我做了一些测试,以确定它是否可以处理编译的Free Pascal/Delphi单元并且发现它易于实现.所以有可能

  • 发布在公共Maven存储库中为Free Pascal(或Delphi)预编译的开源库
  • 包含此存储库中包含依赖关系信息的元数据
  • 在命令行上使用Maven从公共存储库下载开源库,并自动解析所有依赖项
  • 作为代理工作的本地存储库可用于缓存经常使用的二进制文件
  • 自动校验和生成和验证(由Maven提供)将降低下载损坏的二进制文件的风险
  • 二进制文件可以提供源代码甚至文档文件
  • 可以提供带有或不带调试信息的二进制文件
  • Hudson,TeamCityCruiseControl等持续集成服务器可用于在将更改提交到源控制系统时构建项目,并通知开发人员有关构建错误的信息

这种依赖管理方式对于使用许多具有复杂依赖性的第三方库的开源项目非常有用.它可以避免因使用错误版本而导致的典型冲突.

对于开发人员,编辑和构建项目的工作流程将降至最低:

  • 从内部版本控制系统检出项目源
  • 编辑源文件
  • 运行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是一个基于pascal的构建系统,为FPC开发和分发
  • FPMake通过定义一些限制(如标准目录)来标准化建筑
  • 该命令fppkg <packagename>将在数据库中查找该包,将其解压缩,然后编译fpmake.pp并运行它
  • 它有标准的构建目标(清理,构建,安装......)
  • 它可以创建一个适合导入存储库(如mvn deploymvn 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>
Run Code Online (Sandbox Code Playgroud)

Mas*_*ler 0

听起来是一个有趣的计划,但 Delphi 社区(我想 FPC 更是如此!)将库作为源代码的价值远远超过预编译库。普遍的共识是,任何使用纯二进制库的人都是傻瓜,原因有两个:你无法修复在其中发现的任何错误,并且编译器的更改将破坏兼容性。