2014-09-05 87 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