2014-09-05 62 views
3

我想在Pharo中开发一个简单的项目,并且我想在Metacello中添加它的依赖项。我的项目取决于Glamour,Roassal和XMLSupport。Pharo依赖地狱

干净安装我的项目的一种方法是先手动安装依赖关系。继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,并且使用当前安装在我的映像中的版本(分别为2.6快照,1.430和1.2.1)添加了Glamour,Roassal和XMLSupport作为依赖关系。

问题是我无法使用Metacello在新鲜的图像中加载我的项目。该项目加载正常,但每当我尝试加载我的课,我得到方法缺失魅力错误。而且,很明显,有些东西是不同的,因为即使是世界菜单也有不同的条目。

我尝试了其他版本的组合,包括使用稳定的魅力(2.1),但我已经获得更多的错误,包括甚至不能在版本中打开项目(它抱怨失踪的Roassal名称)。

干净地添加这些依赖关系的正确方法是什么?

回答

2

首先我要强调的是,如果配置是类ConfigurationOf <凸出名>可以加载它使用#configuration消息:

Gofer new 
    smalltalkhubUser: 'Moose' project: 'Glamour'; 
    configuration; 
    load. 
(Smalltalk at: #ConfigurationOfGlamour) perform: #loadDefault. 

AI没有看到你的项目,我可以建议你手动编写配置。有一个简单的教程叫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和魅力的印象都非常过时的稳定版本。另外请注意,Roassal2正在积极开发,将取代Moose平台中原有的Roassal,也许你想考虑使用它。

+0

谢谢你的帮助。不过,我仍然有一个问题,因为我在图像中有许多过时的ConfigurationOfMyProject版本。有没有办法删除一切,然后重新启动? – Andrea 2014-09-05 13:27:56

+0

好吧,我设法让它工作。首先,我从映像中卸载了ConfigurationOfMyProject,然后从包缓存和存储库中手动删除了它,最后我能够开始新鲜了。 – Andrea 2014-09-05 13:44:33

+0

不过,我还有一个问题。在将我的项目载入新图像之后 - 现在可以使用 - 世界菜单略有不同:Roassal元素不在其自己的子菜单中。如果我像上面一样加载Roassal(使用Gofer),这会得到修复,但我得到一个警告,我将加载一个新版本的Roassal,并且工作副本很脏。这是为什么?是否因为魅力改变了它?我有点困惑 – Andrea 2014-09-05 13:47:05

1

我会严重阻碍手动编写配置 - 这是Metacello的汇编代码;)除非您正在使用平台特定的代码(例如代码为Pharo 1.4 vs Squeak 4.5)来交叉Smalltalk平台项目 - 尚未探索的区域,Versionner是您的工具。我已经用它编写了几十个配置文件,但尚未遇到障碍。

当你说你将它们添加为依赖关系时,是否将它们添加为“依赖项目”窗格中的项目?

enter image description here

如果是的话,你还必须指定项目的包依赖它们。为此,请在“软件包”窗格中选择项目的相关软件包。现在

enter image description here

,点击与刚刚成为使铅笔图标编辑按钮。在出现的对话框中,点击绿色的+按钮并添加感兴趣的外部项目。

enter image description here

+0

是的,这就是我所做的。经过相当多的实验后,看起来问题是Glamourand Roassal之间的加载顺序。显然,如果我先放置Roassal--这正是我所做的 - 然后Glamour加载将用不同的版本覆盖Roassal,这是我的问题的根源。奇怪的是,如果我第一次加载Roassal和Glamour,那么它就会被Glamour覆盖。我怀疑有循环依赖,这从来不是一个好主意。 – Andrea 2014-09-08 07:30:08

1

它看起来像你想这在旧版本菲罗的?

Roassal已被Roassal2所取代,XML支持位于smalltalkhub上,分为ConfigurationOfXMLWriter和ConfigurationOfXMLParser,都在PharoExtras中。

如果您从Glamour加载正确的组,您不需要描述对Roassal的依赖关系,因为魅力已经取决于Roassal(2)。这解释了你的循环依赖。

您也遇到了我们最近在Pharo邮件列表 上讨论的问题,即#stable不是可用的符号版本名称。在Seaside/Magritte/Grease项目中,我们更改为使用#'release3.1'风格的符号版本名称。这可以确保在稳定进行时有较少的连锁反应。

快照版本不应该是依赖项,它们只是描述当前加载的内容,基本上不可升级。

默认情况下,Metacello试图聪明地安装旧版本而不是新版本。只要事物没有移动到不同的包,这个工作就很好。所以在这里有一点运气不好,你最终失去了工作的组合。

Metacello支持复杂的工作流程,以及不同的smalltalk项目(需要)使用不同的工作流程。通常需要一段时间才能达成共识,以达成最佳做法。

Roassal不依赖于魅力,但你可以在自己的配置创建循环:)

包从squeaksource移动至SS3和smalltalkhub因为服务器已经有稳定性问题。最近,这些问题似乎已得到修复。 XML支持被拆分,因为有很多应用程序实际上不需要写入和读取xml。

一旦你有一个工作配置,在pharo的持续集成服务器上构建和测试它可能是一个好主意:http://ci.inria.fr/pharo-contribution 如果不是你的实际应用,至少是你使用的开源部分。这样,法罗,魅力& Roassal团队可以知道他们做出的改变是否会导致某些事情发生。

+0

我是Pharo的绝对初学者。我已经使用Pharo 3.0,并且我已经按照PBE2上的说明安装了Glamour和Roassal。顺便说一下,我明白魅力取决于Roassal,反之亦然?不幸的是,我已经开始了我的项目,取决于Roassal1,但不知道更好,现在需要一点时间将其翻译成Roassal2。关于XML支持:如果我从SmalltalkHub加载包,我会以相同的类结束,还是两个是不同的项目? – Andrea 2014-09-12 07:44:48