Hello all,

I've now solved the problem by writing my own proxy. It's called DSMP 
(Dead Stu..Simple Maven Proxy) and can be used with the <proxy> setting in 
settings.xml.

It has these features:

- It automatically mirrors any Maven repository, not only those mentioned 
in some config/POM/whatever file.
- It remembers error returns from respository servers, so update checks 
run really fast. In the next version, I'm thinking about pluggable status 
caching strategies.
- You can redirect requests from one URL to another. So, for example, if 
Maven believes that the maven-compiler-plugin has to be downloaded from 
http://mysterious.com/, you can rewrite that URL in the proxy without 
having to touch either your local repository or the broken POM. Of you can 
direct all maven requests to your nearest proxy without having to change 
the maven configuration. This will even work if there are multiple URLs to 
access the same file on a server (for example, on maven.sateh.com, 
"maven2" is a link to "repository").
- It allows to merge patches into the downloads. This way, you can add 
your own fixes to broken artefacts without changing maven, without having 
to enable SNAPSHOTs and without having to worry that all your developers 
use the same proxy/mirror/repository settings.

Things I'm thinking about:

- Forbid downloads (always return 404 for some site)
- Lock down snapshots (always return "no, there is no newer version")
- Version migration. There should be a simple way to create a 
self-contained set of files which allow a new plugin/artefact version to 
run/compile. The idea is that one developer examines a new version, checks 
that it doesn't break the build, etc. and then tells the proxy "Ok, now I 
want everyone to be able to see the new version" or "Nah, drop it".

I was thinking if you might want to include this in Archiva. The proxy 
runs independent of any container, though. Since it can create an 
arbitrary amount of threads, starting it from tomcat or jetty might not be 
that smart.

-- 
Aaron Digulla

Reply via email to