dependency-management - 法罗依赖 hell

标签 dependency-management smalltalk pharo

我想在 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.

然后我的项目将正常工作。

我试图创建一个 ConfigurationOfMyProject使用 Versionner,我添加了 Glamour、Roassal 和 XMLSupport 作为依赖项,使用当前安装在我的镜像中的版本(分别为 2.6-snapshot、1.430 和 1.2.1)。

问题是我无法在新图像中使用 Metacello 加载我的项目。该项目加载良好,但每当我尝试加载我的类时,我都会在 Glamour 中遇到方法丢失错误。此外,很明显有些不同,因为即使是世界菜单也有不同的条目。

我尝试过其他版本的组合,包括使用稳定版 Glamour (2.1),但我遇到了更多错误,包括甚至无法在 Versioner 中打开项目(它提示缺少 Roassal 名称)。

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

最佳答案

首先,我想强调的是,如果配置在类 ConfigurationOf 中,您可以使用 #configuration 加载它。信息:

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

A 我没有看到你的项目,我只能建议你手工编写配置。有一个简单的教程叫做 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,也许您想考虑使用它。

关于dependency-management - 法罗依赖 hell ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25683474/

相关文章:

java - 如何删除gradle嵌套的依赖项(子项和兄弟项相同)

Smalltalk - 根据条件迭代字典数组

smalltalk - 如何在 Squeak 中加载 Metacello?

ide - 在 Smalltalk IDE(Squeak、VisualWorks 等)上,如何从正在处理的消息代码中导航到检查另一个消息?

smalltalk - Pharo:我可以手动而不是按字母顺序对协议(protocol)中的方法进行排序吗?

Smalltalk 绑定(bind)

android - 使用Closure整理Gradle依赖项

java - 仅从 Maven 存储库中解压单个依赖项

debugging - 当消息不被理解时,Pharo 如何启动调试器?

go - 如何查看嵌套 Go 依赖项的完整依赖树