I introduced the org.ops4j.pax.url.mvn.defaultLocalRepoAsRemote flag and
set it to true so that the system repo could work at all. My thinking on
mvn urls has changed considerably since then.
I think there are two plausible choices:
1. keep the system repo as the local maven repo in karaf and treat the
~/.m2/repository repo as a remote repo. IIUC this prevents "watch" from
working unless you push the snapshots into the system repo.
2. don't pretend that the system repo is a maven repo at all, and don't
try to use mvn urls with it. Use mvn urls for stuff you don't plan to put
in the system repo at all. Use the normal mvn configuration unchanged.
Either flatten the directory structure or introduce something like a
"system" url handler that just looks in system using the same url structure
as the mvn handler.
After considering the matter for a couple of months now, I'm very strongly
in favor of (2).
Problems with (1):
- Everything you use a mvn url for will get copied into the system repo.
This is highly redundant.
- you need the maven metadata files cluttering up the universe
- There's rarely a guarantee that something you put in the system repo
will be what's used, whether or not you intend to use it.
- Scanning the universe for more recent snapshots unnecessarily slows down
startup
- karaf won't work without the giant aether url handler which pulls in
tons of barely related code.
Problems with your proposed solution:
- everything in the system repo, unless overridden by something remote
that might be more recent, will get copied into the local maven repo. To
me this makes it unacceptable and is the biggest reason I introduced the
org.ops4j.pax.url.mvn.defaultLocalRepoAsRemote flag.
- There's no actual need for the system repo. (this might be seen as an
advantage)
- Everything (except startup bundles) is filtered through the mvn url
handler which may not be what you want.
Advantage of not using the mvn url handler for the system repo:
- the mvn url handler becomes optional and karaf can be self contained
- you can be sure if you put something in system that's what will be used.
- startup for anything in system should be much faster
So right now I'm about
-10 on (1)
-100 on your proposal
+1 on (2)
Note also that right now startup.properties looks like it's using mvn urls
but in fact they are interpreted to point into specific files in the system
repo.
This may have some impact on features and kars. Right now feature
repositories are just xml files typically containing more than one feature
and using mvn urls. Kar files are typically zip archives containing a
maven repo structure with one or more feature repositories and some
artifacts and some resources.
On the other hand the subsystem spec only has things like kar archives,
but the feature repository is in a manifest structured file, has only one
top level feature (or other subsystem) and the artifacts are in a flat
repository, at the root. I don't think there's any good reason to keep the
maven repo structure in our kars or to unpack the contents when installing;
a jar: url ought to work fine.
thanks
david jencks
On Mar 6, 2012, at 7:28 AM, Christian Schneider wrote:
I just discussed with JB how a correct config for pax url could look
like. I think we found a very nice solution (See below).
Basically it uses the default local maven repo as a local repo and uses
the system dir a a remote repo.
- This means the system dir is now read only
- The local repo is the prefered repo to look stuff up
I think this is exactly what we need. JB was first a bit concerned about
the local repo being looked up before the system dir. I think this should
not be a big problem.
For released artifacts it should not matter and for snapshots looking in
the default local repo first is exactly what I need for my own development.
In fact dev:watch now works perfectly for me again. So I propose we
change the pax url config to these settings.
Christian
------
org.ops4j.pax.url.mvn.useFallbackRepositories=false
org.ops4j.pax.url.mvn.defaultLocalRepoAsRemote=false
org.ops4j.pax.url.mvn.repositories= \
http://repo1.maven.org/maven2@id=central, \
http://repository.apache.org/content/groups/snapshots-group@id=apache@snapshots@noreleases,
\
file:${karaf.home}/${karaf.default.repository}@snapshots
--
Christian Schneider
http://www.liquid-reality.de
Open Source Architect
Talend Application Integration Division http://www.talend.com