Hello,
Niclas Hedhman wrote:
Okay, here we have IMHO some things in common. Depot is not a server application and provides only client support for the repository (means basically fetching the dependencies). Well we are not running on Merlin obviously :-)On Friday 18 June 2004 02:49, Adam R. B. Jack wrote:
So -- Avalon repository. How do we see about talking to it? What protocols/APIs? Depot tends to use HTTP (to a file system based repository, ala Maven's Ibiblio, ala ASFRepo spec.) What more is wanted?
Ok, your notes has been registered.
Let us start the discussion around Avalon Repository, and see if something can be learnt from it (over at Avalon we are pretty pleased with it).
What is it NOT;
* Server application.
* A tool to provide central repository services.
* A generic toolkit for use in all types of cases (unlike the intent of Depot).
* Running on top of Merlin.
* As generic as it possibly could be.
Depot offers a little more. The current design covers Maven repositories as well as flat file repositories (for the local repository e.g.). There were a couple of discussions to provide a kind of configuration to also support other repository types. This is currently possible through the implementation of a couple of abstract classes.
So, It is a client to http-transport repositories, maven styled, but allowing for extra meta info (in a separate file) to be able to handle;
* Chained dependencies (i.e. dependencies of dependencies)
* Establishing the classloader hierarchy of the downloaded Jar resources.
But Depot has nothing to do with the classloading itself. It is like already state right now, only for the build dependencies. The chained dependencies are resolved via the dependencies of the dependencies. The design therefor is not yet clear, because the needed meta-data for this is not saved in the repository.
Nice :-) The depot build system is based on antlets, which is a pretty cool build system basically driven by nick chalko. The antlets offer some "reuse" components for the build.
Repository drives Merlin, meaning Merlin uses Repository to get hold of resources (including itself!) hosted at repositories. The Avalon build tools, includes Maven/Ant/Magic plugins/task that generate the resource meta info.
The .meta file for Merlin itself is attached below;
All-in-all, Avalon Repository is both very capable and complete, but it is not 'toolkit-like'. OTOH, 8 months ago it was completely embedded inside Merlin, without any traces as a standalone package, so the first step of refactoring has been made.
We at Avalon, also have created our own build system, based enitrely on Ant, doing just about the same things that Maven is famous for, but at 10x the speed (3min instead of 30-40min on my system for the entire Avalon build).
We call this product "Magic", and it too has 'repository features', but we have not used any of the parts in Avalon Repository, largely because Magic builds Repository, and we really don't want that kind of cyclic dependency.
fine :-)
I hope you can digest this info a bit. The important Avalon crowd, Aaron, Stephen, Alex and myself, have expressed a wish to move Repository functionality into Depot, and get Depot out of Incubator and get proper releases out. Personally, I think Depot importance is big enough to validate a TLP.
Cheers Niclas
# # Meta classifier. # meta.domain = avalon meta.version = 1.1
# # Artifact descriptor. # avalon.artifact.group = avalon/merlin avalon.artifact.name = avalon-merlin-impl avalon.artifact.version = 3.3.0 avalon.artifact.signature = 20040617.091454
# # Factory classname. # avalon.artifact.factory = org.apache.avalon.merlin.impl.DefaultFactory
#
# API dependencies.
#
avalon.artifact.dependency.api.0 = artifact:jar:avalon/framework/avalon-framework-api#4.2.1
avalon.artifact.dependency.api.1 = artifact:jar:avalon/util/avalon-util-lifecycle#1.1.1
#
# SPI dependencies.
#
avalon.artifact.dependency.spi.0 = artifact:jar:avalon/util/avalon-util-extension-api#1.2.0
avalon.artifact.dependency.spi.1 = artifact:jar:avalon/merlin/avalon-merlin-api#3.3.0
avalon.artifact.dependency.spi.2 = artifact:jar:avalon/composition/avalon-composition-api#2.0.0
avalon.artifact.dependency.spi.3 = artifact:jar:avalon/repository/avalon-repository-api#2.0.0
avalon.artifact.dependency.spi.4 = artifact:jar:avalon/logging/avalon-logging-api#1.0.0
avalon.artifact.dependency.spi.5 = artifact:jar:avalon/meta/avalon-meta-api#1.4.0
avalon.artifact.dependency.spi.6 = artifact:jar:avalon/meta/avalon-meta-spi#1.4.0
avalon.artifact.dependency.spi.7 = artifact:jar:avalon/repository/avalon-repository-spi#2.0.0
avalon.artifact.dependency.spi.8 = artifact:jar:avalon/logging/avalon-logging-spi#1.0.0
avalon.artifact.dependency.spi.9 = artifact:jar:avalon/composition/avalon-composition-spi#2.0.0
#
# Implementation dependencies.
#
avalon.artifact.dependency.0 = artifact:jar:avalon/composition/avalon-composition-impl#2.0.1
avalon.artifact.dependency.1 = artifact:jar:avalon/repository/avalon-repository-main#2.0.0
avalon.artifact.dependency.2 = artifact:jar:avalon/repository/avalon-repository-util#2.0.0
avalon.artifact.dependency.3 = artifact:jar:avalon/util/avalon-util-exception#1.0.0
avalon.artifact.dependency.4 = artifact:jar:avalon/util/avalon-util-env#1.1.1
avalon.artifact.dependency.5 = artifact:jar:avalon/util/avalon-util-i18n#1.0.0
avalon.artifact.dependency.6 = artifact:jar:avalon/util/avalon-util-criteria#1.1.0
avalon.artifact.dependency.7 = artifact:jar:avalon/util/avalon-util-defaults#1.2.1
avalon.artifact.dependency.8 = artifact:jar:avalon/meta/avalon-meta-impl#1.4.0
avalon.artifact.dependency.9 = artifact:jar:avalon/util/avalon-util-configuration#1.0.0
avalon.artifact.dependency.10 = artifact:jar:avalon/framework/avalon-framework-impl#4.2.1
avalon.artifact.dependency.11 = artifact:jar:avalon/framework/avalon-framework-legacy#4.2.1
avalon.artifact.dependency.12 = artifact:jar:avalon/logkit/avalon-logkit#2.0.0
avalon.artifact.dependency.13 = artifact:jar:log4j/log4j#1.2.8
avalon.artifact.dependency.14 = artifact:jar:servletapi/servletapi#2.3
avalon.artifact.dependency.15 = artifact:jar:avalon/tools/mailapi#1.3.1
avalon.artifact.dependency.16 = artifact:jar:avalon/tools/jms#1.1
avalon.artifact.dependency.17 = artifact:jar:avalon/util/avalon-util-extension-impl#1.2.0
avalon.artifact.dependency.18 = artifact:jar:avalon/logging/avalon-logging-impl#1.0.0
# # EOF. #