I've been pondering how dependencies could work in Maven over the last
few days and just thought I'd post my thoughts to the list. 

The idea I just had was abstracting out versioning from jar names to
enable Maven to automatically get the latest builds for you. This may or
may not be a good idea, and I seem to remember someone had said
something about standardized naming before, so there may already be
plans like it. But generally if I just want the latest 2.x version of
Turbine, I could put in a dependency that would somehow reflect that and
Maven could automatically upgrade from 2.1 to 2.2 when it becomes
stable.

E.g, inside the dependency element from project.xml:

<version>2</version> - could be any 2.x version
<release>released</release> - only released versions - turbine-2.1.jar
<release>stable</release> - b2/b3/etc. versions are allowed -
turbine-2.2-b2.jar
<release>any</release> - dev versions are also allowed -
turbine-3.0-dev.jar

And perhaps the <jar> element could be completely dropped; instead, let
Maven deduce the correct jar to download based on the desired
version/release info and what's available in the repository.

The other small example of something I'd think would be cool is for a
dependencies.xml for each repository (be it local or remote...?).

There were three cases I came up with that I thought would be useful:
referring to another project.xml on the web (either the same repository
or a different one), referring to another project.xml in CVS, and the
last just simple file linking (both same repository and different? And
then should this allow the same non-strict filename feature outlined
above? I don't know if that's safe or not.).

The only thing is that referring to other repositories and CVS servers
could get slow, so perhaps the dependency tree that gets built should be
cached. Again, I'm not quite sure if this is a good idea or not, I'm
just throwing things out.

Sample dependencies.xml (completely contrived):

<jars>
  <jar name="torque-3.0-b2.jar">
    <http-project name="torque-project-3.0-b2.xml"
url="http://jakarta.apache.org/turbine/jars"/>
  </jar>
  <jar name="turbine-3.0-alpha.jar">
    <cvs-project name="project.xml" cvsRoot="..." passfile="?"
module="jakarta-turbine-3" tag="3.0-alpha?" />
  </jar>
  <jar name="commons-io.jar">
    <file>commons-xo.jar</file>
    <file
remote-lib="http://share.whichever.com";>village-1.5.3.jar</file>
  </jar>
</jars>

The ideas are rather rough, but I thought they might be of use. 

Thanks,
Stephen



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

Reply via email to