Gilles Scokart wrote:
When reading some general info about apache
(http://www.apache.org/foundation/how-it-works.html#management ) I have seen
one of the sentence of The Apache Way : "faithful implementation of
standards".
What does it means for ivy? What are the existing standard (official
standards or de-facto industry standards) related to dependency management?
Making a search, I found JSR 277.
There is also the defacto standards apt, rpm and maven repository.
What else?
Don't you think that such inventory, with description and the its relation
with ivy would have his place on the wiki?
Yes, that would be really good. Don't forget OSGi. There was a really
good OSGi talk at apachecon eu this year.
All these tools are trying to solve slightly different problems.
rpm: manage the state of a single machine, downloading and installing
the requested version of an artifact, uninstalling its precedessor.
apt: manage the state of a single machine, downloading and installing
the requested version of an artifact, uninstalling its precedessor. If
the artifact is only published as source, compile it based on scripts in
the .deb package
They act on the global state of the system, and are primarily a redist
mechanism. Wonderful though they may be.
ivy: manage the dependencies of a build, and across builds. pull down
artifacts into a cache for efficiency.
m2: manage the dependencies of a build, and across builds. pull down
artifacts into a cache for efficiency. With a whole project's metadata
in the pom, on demand-compilation is possible, as is continous
integration without the need to configure the CI server any further.
They are build time. and because you can have different versions
side-by-side in the filesys, that is what you get. What neither of them
do is enforce a hard split between compile time interfaces and runtime
artifacts, or provide any runtime management of JARs you load. They dont
dictate how you use the JARS.
OSGi: manage interaction between deployed artifacts. You can have
different versions in different classloaders; only interface atifacts
are exported, while impl. artifacts are kept private. Its an application
architecture, not a build system. It has limitations (RMI dynamic
classloading is troubled; hot swapping is only slightly possible), but
it tells you how to design your app. Its pretty nice, although your
modules are still coupled at the interface class level, which is fairly
brittle. Tools that integrate by passing XML content around in process
(Cocoon, netkernel) are more loosely coupled as there is no sharing of
artifacts between modules, just XML content.
Also: the Perl CPAN and ruby gems systems.
-steve