On Mar 20, 2007, at 5:39 AM, Gianny Damour wrote:
Also, I believe that losing the "geronimo-" prefixes contributes to the potential confusion.

How exactly?
Let's illustrate:

When we loose the modules part and keep the geronimo- prefix in the artifactId, a maven repo looks like this from the dir org/apache/ geronimo/server:
geronimo-activation
geronimo-activemq-gbean
geronimo-activemq-gbean-management
<more geronimo- stuff>
apps
<more geronimo- stuff>
assemblies
<more geronimo- stuff>
configs
<more geronimo- stuff and you get the idea>

Intuitively, I classify the folders starting with geronimo- into the same category and apps, assemblies et cetera stand out.

Now, we also loose the geronimo- prefix and we have:
activation
activemq-gbean
activemq-gbean-management
<more stuff>
apps
<more stuff>
assemblies
<more stuff>
configs
<more stuff and you get the idea>

This is confusing as apps, assemblies et cetera are lost within a list of other directories.

I don't believe that folks who are used to m2 repos are going to get confused... this is how m2 works. I would rather have each set of related modules use their own groupId, like for AMQ org.apache.geronimo.activemq, but I fear if we start doing that then we are going to run our selves into the ground with long path name problems :-( Or maybe we should rebel and go back to using geronimo as the root groupId... hrm... that would ruffle some feathers :-P


Yes, the point is to eventually drop the "modules/*". I sent mail about this months ago, we are in line for a significant restructuring of the project tree to group related mvn modules to simplify the build as well as organize modules into smaller workable chunks.
I know as I read it :). The point I am trying to make is: if modules/ is dropped, then new developers will have a hard time to understand the folder organization for reasons very similar to the above maven repo example.

I don't follow how organizing modules into related groups is going to make it hard for folks to follow. "Where are all the activemq modules? they are in the activemq/* directory.". IMO its more cumbersome/difficult now for new folks to understand, since part of things for a feature are in modules/* and part are in configs/* with a whole lot of other stuff in between to confuse the heck out of you. Not that it confused me... but if you are talking about getting new folks up to speed, then having smaller groups of modules which are *all* related makes *much* more sense than what we have now.


Ya, that is one of the main reasons to reorganize. Now that our build tool supports this sort of grouping and can handle resolving dependencies on a set of modules in an arbitrary tree. This would have been very difficult to setup/main w/m1... which is why everything was dumped into a relatively flat structure. This structure is more of a burden to us now that anything else. And it should be changed so simplify the build and to help speed up partial builds.
How does m2 handle the resolution of dependencies on an arbitrary tree? Is it as simple as: mvn <build these modules:please also build afferent dependencies>?

M2 handles this via the <modules>... definitions in poms. You can setup an arbitrary tree by configuring the poms list of its child modules.


I think if folks want to use a script to build specifics that is up to them. I don't recommend nor want to see a ton of build scripts checked into svn though. IMO most of these problems can be fixed by simply reorganizing the tree and issuing a mvn cmd. But, right now you have to issue a ton of very specific mvn commands to build related components/configs/assemblies.
I think the same result can be delivered w/o any reorganizing with the magic mvn <build these modules:please also build afferent dependencies> command.

<sarcasm>
Magic mvn command? Are you serious? Has Disney taken over the Maven project? Is Mickey Mouse going to hold my hand while I run the magically mvn command?
</sarcasm>

But seriously, there is no _magic_ mvn command... and IMO trying to create one will *only* complicate things more.


E.g., I am in the server/trunk folder and do:
mvn <magic command like partial-build> modules/jetty6

mvn does a first pass to load the dependency graph for the overall tree; identify the afferent artifacts of modules/jetty6; and build modules/jetty6 and all of its afferent artifacts.

It seems to me that a single script can do all the above w/o too much maven magic required. Obviously, everything happens outside of maven; yet it is simple to implement and more people can maintain and contribute.

Do you remember everyone bitching about the bootstrap command? And the mess about getting it to work on win32 and unix... and how folks still wanted to use mvn...

 * * *

modules/*, configs/*, applications/* and probably even assemblies/* to some degree... are relics of the m1 build. m2 is a different beast which has more features for organization of a multi-module build. To best suite our build needs and to support our growing project (which the codebase seems to keep getting larger) we really need to reorganize the structure.

--jason

Reply via email to