Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you add dependency to a Pharo image?

After building an application using Seaside I managed to push my Pharo image code to GitHub using iceberg. I was able to clone it into a new Pharo image on a new machine. However, loading the package into the image seems to generate an error requesting some seaside dependencies. I still don't understand the concept of adding a dependency to a Pharo image. Could one explain to me how to go about doing it? I need it for code deployment and collaboration.

like image 965
ludo Avatar asked Oct 16 '22 12:10

ludo


1 Answers

I'm sorry, I don't understand completely your question. If you mean how can you define a project (which can have dependencies, etc.), something like you would be doing with, for instance, maven, you need to define a Baseline.

A baseline is a class (and a package) that you need to define and save with your sources. Take this one as example: https://github.com/estebanlm/logger/blob/master/src/BaselineOfLogger/BaselineOfLogger.class.st

(this is the smallest example I found, and the project itself is not very interesting).

I will explain it in parts:

You have a class named BaselineOfLogger that inherits of BaselineOf and is placed in a package with the same name of the baseline (this is important, for the tools to find it later).

You define a method tagged with the pragma baseline (pragmas are a little bit like annotations):

BaselineOfLogger >> baseline: spec [
    <baseline>

    spec for: #pharo do: [
        self beacon: spec.
        spec package: 'Logger' ].   
]

as you can see this method defines a "spec" for Pharo: - it will load beacon project (we'll see this later) - it declares it will load the package Logger.

The method beacon: is defined like this:

BaselineOfLogger >> beacon: spec [
    spec 
        baseline: 'Beacon'
        with: [ spec repository: 'github://pharo-project/pharo-beacon/repository' ]
]

and as you can see, it points to another project (and another baseline). Now, since you need Seaside, your Baseline could look something like this:

BaselineOfMyProject >> baseline: spec [
    <baseline>

    spec for: #pharo do: [
        spec 
            baseline: 'Seaside3'
            with: [ 
                spec repository: 'github://SeasideSt/Seaside:v3.2.4/repository' ]
        spec package: 'MyPackage' ].    
]

Finally, in your image, to load you will do something like this:

Metacello new 
    repository: 'github://yourname/yourprojectname/src';
    baseline: 'MyProject';
    load.

This is more or less like that. But please note than declaring dependencies is a complicated matter (no matter the language you use) and the example I made will cover just the very basics.

like image 83
EstebanLM Avatar answered Oct 21 '22 07:10

EstebanLM