我正在尝试在Pharo中开发一个简单的项目,我想在Metacello中添加它的依赖项。我的项目取决于Glamour,Roassal和XMLSupport。
干净地安装我的项目的方法是先手动安装依赖项。在书Deep into Pharo之后,可以做
Gofer new
smalltalkhubUser: 'Moose' project: 'Glamour';
package: 'ConfigurationOfGlamour';
load.
(Smalltalk at: #ConfigurationOfGlamour) perform: #loadDefault.
Gofer new smalltalkhubUser: 'ObjectProfile'
project: 'Roassal';
package: 'ConfigurationOfRoassal';
load.
(Smalltalk at: #ConfigurationOfRoassal) load.
Gofer new
squeaksource: 'XMLSupport';
package: 'ConfigurationOfXMLSupport';
load.
(Smalltalk at: #ConfigurationOfXMLSupport) perform: #loadDefault.
然后我的项目就可以了。
我尝试使用Versionner创建ConfigurationOfMyProject
,并使用当前安装在我的映像中的版本添加了Glamour,Roassal和XMLSupport作为依赖项(2.6-snapshot,1.430和1.2.1分别地)。
问题是我无法在新图像中使用Metacello加载我的项目。该项目加载正常,但每当我尝试加载我的类时,我得到方法缺少Glamour中的错误。而且,很明显有些东西是不同的,因为即使世界菜单也有不同的条目。
我尝试了其他版本的组合,包括使用稳定的Glamour(2.1),但我已经获得了更多错误,包括甚至无法在Versioner中打开项目(它抱怨缺少Roassal名称)。
干净地添加这些依赖项的正确方法是什么?
答案 0 :(得分:3)
首先,我想强调一下,如果配置在类 ConfigurationOf< proj-name> 中,您可以使用#configuration
消息加载它:
Gofer new
smalltalkhubUser: 'Moose' project: 'Glamour';
configuration;
load.
(Smalltalk at: #ConfigurationOfGlamour) perform: #loadDefault.
我没看到你的项目,我可以建议你手工编写配置。有一个名为Dead simple intro to Metacello的简单教程。
根据你的描述,它应该是这样的:
baseline01: spec
<version: '0.1'>
spec for: #common do: [
spec blessing: #release.
spec repository: 'your repo url'.
spec
package: 'YourPackage' with: [
spec requires: #('Glamour' 'Roassal' 'XMLSupport') ].
"also maybe you have a couple of packages that depend on different projects"
spec project: 'Glamour' with: [
spec
className: 'ConfigurationOf Glamour';
repository: 'http://smalltalkhub.com/mc/Moose/Glamour/main';
version: #'2.6-snapshot' ].
spec project: 'Roassal' with: [
spec
className: 'ConfigurationOfRoassal';
repository: 'http://smalltalkhub.com/mc/ObjectProfile/Roassal/main';
version: #'1.430' ].
"and same for XMLSupport" ].
此外,您可以尝试加载#development版本,因为我的印象是像Roassal和Glamour这样的项目已经过时了稳定的版本。另请注意,Roassal2正在积极开发中,将取代Moose平台中的原始Roassal,也许您想考虑使用它。
答案 1 :(得分:1)
我会非常不鼓励手写编写配置 - 这是Metacello的汇编代码;)除非您正在使用特定于平台的代码(例如Pharo 1.4与Squeak 4.5的代码)进行跨Smalltalk平台项目 - 一个区域还没有探索过,Versionner是你的工具。我已经用它写了几十个配置文件,还没有遇到障碍。
当您说将它们添加为依赖项时,您是否只是将它们作为项目添加到“从属项目”窗格中?
如果是这样,您还必须指定项目的哪些包依赖于它们。为此,请在“包”窗格中选择项目的相关包。
现在,点击刚刚启用的铅笔图标的编辑按钮。在出现的对话框中,单击绿色的+
按钮并添加感兴趣的外部项目。
答案 2 :(得分:1)
看起来你在旧版Pharo中尝试这个?
Roassal已被Roassal2取代,对XML的支持在smalltalkhub上,分为ConfigurationOfXMLWriter和ConfigurationOfXMLParser,两者都在PharoExtras中。
如果你从Glamour加载正确的组,你不需要描述对Roassal的依赖,因为Glamour已经依赖于Roassal(2)。这解释了你的循环依赖。
您还遇到了我们最近在pharo邮件列表上谈到的问题 #stable不是可用的符号版本名称。在Seaside / Magritte / Grease项目中,我们改为使用#'release3.1'样式的符号版本名称。这可确保稳定进展时产生较小的连锁反应。
快照版本永远不应该是依赖项,它们只描述当前加载的内容,并且基本上不可升级。
[编辑] 默认情况下,Metacello试图明智地表示不安装较新版本的旧版本。只要不将东西移动到不同的包中,这种方法就能很好地工作。所以在那里运气不好,你最终得到了一个非工作组合。
Metacello支持复杂的工作流程,以及不同的smalltalk项目(需要)使用不同的工作流程。通常需要一些时间就最佳做事方式达成共识。
Roassal不依赖于Glamour,但您可以在自己的配置中创建循环:)
软件包已从squeaksource移至ss3和smalltalkhub,因为服务器存在稳定性问题。最近,这些问题似乎已得到解决。 xml支持是分开的,因为注意到许多应用程序实际上不需要写入和读取xml。
一旦你有了工作配置,在pharo的持续集成服务器上构建和测试它可能是一个好主意:http://ci.inria.fr/pharo-contribution 如果不是您的实际应用程序,至少是您使用的开源部分。那样Pharo,Glamour&amp; Roassal团队可以知道他们做出的改变是否会破坏某些东西。