我创建了一个小项目 [0] 来在受控环境中重现错误。事实上,我正在使用 Jenkins 来构建我的项目,一个大项目,我想进行一些并行构建。让我用图形来表示
[MyBasicPackage] -----> [MyPackageTester] ------> [MyBasicApp]
.
.
+-----> [...]
+-----> [...]
这是我在 [0] 上创建的组织,我在 spring 容器上注册了一个类 TMyUnit (MyBasicPackage) 进行测试。我构建它并生成它的 .dcu、.bpl 等。 第二阶段,我构建需要 MyBasicPackage 的 MyPackageTester。最后,我构建了需要 MyPackageTester 的应用程序。到目前为止一切顺利。
当我尝试在 PC-00 上构建我的 MyBasicPackage 时,获取工件并尝试在 MyPackageTester 上构建 MyPackageTester strong>PC-06(相同的架构,相同的操作系统,相同的IDE,相同的spring4d版本),并且出现了一个不错的错误:
Unit TMyUnit was compiled with a different version of Spring.Container.Registration
因此,我在两台机器(PC-00 和 PC-06)上更新了 spring4d 并构建了它们。运行...并出现同样的错误。 检查库路径选项(C:\Program Files (x86)\Embarcadero\Studio\14.0\Componentes\spring4d\Library\DelphiXE6\Win32\Debug),删除 dcu 文件并再次构建它们两台机器,同样的错误。 将 dcu 文件从 PC-00 复制到 PC-06 以避免出现任何类型的系统配置和相同的错误。
也许我正在尝试做一些目前为止不可能的事情。我用谷歌搜索了几天,但没有成功。
有什么想法吗?
请随意 fork 或拉取示例;)
问候
最佳答案
在您的情况下,您需要使用 Spring.Core 运行时包进行构建。这不仅可以防止此错误,而且您的代码实际上可以工作。
如果您不这样做,那么所有模块都将保留您正在使用的 GlobalContainer 实例的自己版本,并且什么都不会起作用。
关于Delphi分布式构建失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32943653/