On Thu, May 7, 2009 at 8:18 AM, Daniel Spiewak <djspie...@gmail.com> wrote:

> Consider: http://github.com/djspiewak/gll-combinators
>
> Specifically, the examples/ directory defines a separate Buildr project
> which depends upon the project in its parent directory (gll-combinators).
>  I
> could have done this by using two sub-projects, but I wanted a very
> specific
> directory organization.  In other words, I wanted the main sources to be
> under gll-combinators/src/main/scala/ while the examples are under
> examples/src/main/scala/.
>
> Currently, I'm handling this by actually shelling out to Buildr from within
> the examples/ buildfile, building the parent project and then explicitly
> adding its target/classes/ directory to the examples/ dependencies.  Is
> there a better way of doing this?  Better question: *shouldn't* there be a
> better way of doing this?  :-)


Yes.

Project definitions should be portable, so if you did everything by the
book, you should be able to import gll-combinators from within examples (or
the other way around). Some gotaches:

- You build now runs from a different directory, anything that assumes
relative paths is broken, but anything that uses _(..) will adjust. For
that, imported projects need to set their base_dir.
- Project references are relative, so if you have some 'master' project and
you import foo and bar, they can reference each other foo:module1,
bar:compA, etc.
- Globals may conflicts (and constants will warn you when they're redefined)
- Build settings (build.yml, profile.yml): you can only use one of these.

Generally easier (and from what I've heard more common) to start with the
outer buildfile and import nested buildfiles from its sub-directories. Would
be easier if everything we do only supports that, so let's use that as a
mental model for what you're doing.

>From examples/buildfile:

- cd one level up, since you're effectively running the build from here.
- require gll-combinators, everything you do afterwards should extend it
- define the examples projects, base_dir should just point one level down
(since you're current dir is now one level up)

(You won't get tasks/build.yml/etc from the outer directory since the
directory change happens to late, but if the model works, we could make
Buildr do the right thing with some magic switch)

Assaf


>
> Optimally, I would like to just `require` the parent's buildfile and then
> using project('gll-combinators') to declare the dependency within the
> examples/ buildfile.  However, Buildr doesn't seems to have some global
> state relating to project definitions, meaning that this sort of thing
> doesn't work at present.



>
>
> Daniel
>

Reply via email to