You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@excalibur.apache.org by Leo Simons <ls...@jicarilla.org> on 2004/07/13 14:08:59 UTC

Project layout

Build partitioning
------------------
When working with multiproject builds, I've found it very advantageous 
to not use a very flat directory structure, but actually partition up 
into several small directories, ie a deeper structure. I believe a 
useful strategy is to split things up along the axis of

   "core stuff" -------------------------- "non-core optional stuff"
   "no dependencies" --------------------- "many dependencies"

ie make the tree organized loosely like a gump dependency tree.

This allows us to collapse some versioning nightmares, makes it easier 
to build only a part of a project, and makes it easy to spot and avoid 
potentially circular dpeendencies.

Sloppy partitioning
-------------------
A few days ago, I restructured the svn repository into four categories:

1) containerkit: the independently reusable things fortress
                  depends on
2) fortress:     the fortress subprojects
3) components:   the independently reusable things fortress does not
                  depend on
4) deprecated:   stuff we really don't want the other projects
                  depending on
(and buildsystem/ and site/ as "augmented" stuff)

I didn't think it through well enough -- there's a flaw in this 
structure: fortress depends on sourceresolve and pool, but these are in 
"components", not "containerkit". That's because I thought of these as 
more reusable components. Whoops. Incosistency.

I still think we should split up the repository into a few categories. I 
guess it maybe is better to just have

1) components:   the independently reusable things
2) fortress:     the fortress subprojects
3) deprecated:   stuff we really don't want the other projects
                  depending on

the ugly bit here is that some of these components depend on 
fortress-meta. Maybe a good way to fix that is to use metaclass+qdox for 
our metadata (de)serialization.

There is more uglyness surrounding excalibur-testcase. Some of the 
component have tests that depend on it. That's a big TODO.

Moving stuff around
-------------------
> * Why separate out deprecated elements?

The rationale is that you can

   cd components
   maven multiproject:install

and make sure you're not using any deprecated materials.

> Isn't that going to lead to more 
> churns as components are moved between different lifecycles?

my thinking was that 'svn move' is actually a very easy way to mark 
things as deprecated. IE

svn copy \
   -m "Save off excalibur-logger snapshot before deprecating it" \
   https://svn.apache.org/repos/asf/excalibur/trunk
https://svn.apache.org/repos/asf/excalibur/branches/Excalibur-Logger-Before-Depreaction

svn move \
   -m "Deprecating excalibur-logger in favour of foo-logger" \
   https://svn.apache.org/repos/asf/excalibur/trunk/containerkit/logger \
   https://svn.apache.org/repos/asf/excalibur/trunk/deprecated/

should be very easy and efficient. However, it seems that svn is not as 
good at merging move changes into a locally modified copy as I thought 
it was. Shame.

> WHy not 
> break the hierarchy up in how they are used? (ie why not have ecm/, 
> fortress/, instrument/ etc as base dir names)

Well, like I said above, I think its nice to have a deeper tree structure.

> yadda yadda yadda

please do yadda yadda on a little more ;)

- LSD

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@excalibur.apache.org
For additional commands, e-mail: dev-help@excalibur.apache.org
Apache Excalibur Project -- URL: http://excalibur.apache.org/


Re: Project layout

Posted by Peter Donald <pe...@realityforge.org>.
Leo Simons wrote:

> Build partitioning
> ------------------
> When working with multiproject builds, I've found it very advantageous 
> to not use a very flat directory structure, but actually partition up 
> into several small directories, ie a deeper structure. I believe a 
> useful strategy is to split things up along the axis of

I have learnt almost exactly the opposite. You can not force 
dependency structure by where a source tree lives.


> I still think we should split up the repository into a few categories. I 
> guess it maybe is better to just have
> 
> 1) components:   the independently reusable things
> 2) fortress:     the fortress subprojects

Why is not fortress a component? It is an "independently 
reusable things". At what point does a component get 
migrated up?

I will say again that I think that it is best to group code 
trees based on what elements will be worked on in concert. 
To reiterate the main groups I see being "ecm", "fortress" 
and "instrument".

> 3) deprecated:   stuff we really don't want the other projects
>                  depending on

Deprecated code should be archived up tagged and removed. We 
do not want excaliburs svn repo to act as a dumping ground 
for dead code.

>> * Why separate out deprecated elements?
> 
> 
> The rationale is that you can
> 
>   cd components
>   maven multiproject:install
> 
> and make sure you're not using any deprecated materials.

That is not true. The deperecated components will be sucked 
from local repo anyways so this makes no difference.



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@excalibur.apache.org
For additional commands, e-mail: dev-help@excalibur.apache.org
Apache Excalibur Project -- URL: http://excalibur.apache.org/