Hi,

I noticed you work on support for so-called transitive dependencies in
Maven 2.

In the absence of support for it in the current Maven release we
developed a solution for this specific to the needs in our projects.

Now, I would like to compare your concepts with ours. But it seems to me
you haven't yet published a coherent explanation of the mechanisms you
invented to make transitive dependencies work.

I try to outline our concepts in a nutshell. Maybe you can tell me how
these relate to yours:

We distinguish projects into components and assemblies. A Maven
project.xml either defines an assembly or a component.

A component has code and only defines its direct, i. e. non-transitive
dependencies in its project.xml.

An assembly, on the other hand, doesn't have code but only
configuration. And, above all, it defines all the dependencies to the
assembled components including the transitive ones in its own
project.xml.
Transitive dependencies can be distinguished from non-transitive ones in
the assembly's project.xml by a dedicated dependency property.
Duplicate dependencies are eliminated and version conflicts are resolved
in the assembly's project.xml.

We deal with almost 100 components, i. e. Maven projects which are being
further developed by us plus a large number of third party jars. On top
of this we currently manage some 20 assemblies.
New versions of these components practically pop up every day. All in
all, this means that we have a very dynamic configuration management
environment.

In order to 
a) create assemblies efficiently and reliably, and
b) keep up with the advent of new versions of dependencies in the
project.xml files of dependees
we developed a gui tool that uses a configurable strategy to create and
update project.xml files of assemblies and components.
The tool... 
- has an integrated repositories browser, 
- allows to add and to remove non-transitive dependencies to/from a
project
- allows to browse transitive and non-transitive dependencies and
dependees recursively to an arbitrary depth
- allows to analyse version conflicts in the dependencies
- computes the recursive hull of indirect dependencies if the project is
an assembly
- automatically resolves the conflicts by selecting the appropriate
version per artifact according to a selectable default strategy and
user-defined exception rules
- offers two default strategies: one is to select the latest release of
an artifact and the other is to select the SNAPSHOT if no other rule
fires

The latest release strategy can distinguish between repositories which
are to be scanned for the latest release available and those which are
not. If the latest release is desired for an artifact that resides in a
repository which must not be scanned, the search for the latest release
is confined to what is reachable in the dependency graph that roots in
the project currently being maintained with the tool. The latter is
useful for repositories of third party artifacts which are not under
full control of the software project that uses it. Here, one doesn't
want to fish the latest stuff only because it exists (put there by some
foreigner) but only when at least one of one's own components' really
states a need for it.

User-definable exception rules allow to enforce a specific version for a
dependency or to deprecate, i. e. exclude specific dependencies from the
list of candidate versions. In the extreme, the user could thus nail
down the version for each artifact if the default rules don't yield what
he desires).

The default strategy and the exception rules are saved as properties in
the respective project.xml. This way they are available in the next tool
session again.

--End of the outline of our concepts

I suspect that you have arrived at a similar but surely not identical
solution. Especially, I wonder how you give full control to the
assembler on which versions to use in conflict situations, because I
don't think you distinguish between dedicated assembly projects and
component projects, don't you? The other thing that worries me is: do
you compute transitive dependencies each time again when you touch the
project.xml with a Maven command? I'm not asking this because I'm afraid
of performance, although that could be an issue, too. But I fear the
indeterminism.

Regards,
Matthias








---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to