2015-10-05 61 views
4

我创建了一个小型项目[0]在受控环境中重现错误。事实上,我使用jenkins来构建我的项目,一个很大的项目,我想做一些平行的构建。请让我以图形Delphi分布式构建失败

[MyBasicPackage] -----> [MyPackageTester] ------> [MyBasicApp] 
     . 
     . 
     +-----> [...] 
     +-----> [...] 

这是我的[0],我对Spring容器注册类TMyUnitMyBasicPackage)进行测试所做的组织。我构建它并生成.dcu,.bpl等。 第二阶段我建立我的MyPackageTester需要MyBasicPackage。最后,我构建了需要MyPackageTester的应用程序。到现在为止还挺好。

当我尝试建立我MyBasicPackage,说PC-00,拿到神器,并尝试建立了MyPackageTesterPC-06(同拱,相同的操作系统,相同的IDE,同样spring4d版本),和一个不错的错误出现:

Unit TMyUnit was compiled with a different version of Spring.Container.Registration 

所以,更新我在两台机器上spring4d(PC-00PC-06),并建立他们。运行...并出现相同的错误。 检查库路径选项(C:\ Program Files文件(x86)\ Embarcadero \ Studio \ 14.0 \ Componentes \ spring4d \ Library \ DelphiXE6 \ Win32 \ Debug),删除dcu文件并在两台机器上再次构建它们,错误。 从复制dcu文件PC-00PC-06避免任何类型的系统配置并出现相同的错误。

也许我正在尝试做一些迄今为止不可能做到的事情。我搜索了几天没有运气。

任何想法?

请随时叉子或拉入请求的例子)

问候

[0] https://github.com/graguirre/DelphiDepencyExample

回答

2

你的情况,你需要建立与Spring.Core运行时包。这不仅会防止这个错误,而且你的代码将会真正起作用。

如果你不这样做,那么所有的模块都会保存你正在使用的GlobalContainer实例的版本,并且什么都不会起作用。

+0

由于任何原因,我无法动态链接到IDE中,所以我创建了一个makefile并且工作流畅。我创建了第三方单元目录来保存spring的DCU,并且只需将-LUSpring.Core添加到我的构建选项编译器中,即可动态链接Spring.Core的lib。我已经更新了这个解决方案到我的github repo https://github.com/graguirre/DelphiDepencyExample –

+0

可以被源重新创建的二进制文件不应该存储在VCS中,但是不管。 –

+0

我会尝试结帐春天,建立它,并与我的小项目链接。 –

2

也许一个解决方案是把你所有的库放在一个集中的仓库中,然后把它们拖拽到你的项目中。它应该解决不同版本的错误。

+0

这将解决编译错误,但不是功能缺陷。 –

+0

如何使用运行时软件包构建另一个软件包? –

+0

将软件包添加到dpk中的requires子句 –