Hi all,

to be honest I'm not familiar enough with mvn to really know how to
debug things, but I'll explain how Gump and mvn play together and toss
out some ideas.  Maybe at the end of the thread we will know how to
really debug things.  If you can come up with a better idea, I'll be
grateful.

Part of the Gump project is a simple web application that is started
on the same machine that runs Gump.  This application is configured as
a proxy to the "central" repository for all mvn projects built by
Gump.

This web application transparently proxies central for all requests it
doesn't know anything about - which is any request at the start of a
Gump run.

When Gump finishs building a jar, it registers the jar with the proxy,
giving a group and artifact id taken from the Gump descriptor.
Subsequent requests to the proxy for any jar (or checksum file) that
matches the combination of groupid and artifactid will return the jar
built by Gump (and matching checksums respectively) - the requested
version is then ignored.

For mvn projects built by Gump this has a few consequences

* only build order matters.  A project will get a Gump-built artifact
  if it builds after the project that creates the artifact, no matter
  whether it explicitly states a dependency on it or not.

* since <option> and <depend> have the same impact on build order, it
  is better to only use <option> in the Gump descriptor.  If the
  dependenciy fails to build in Gump your project can still build and
  will get the artifact from central.

* mvn downloads stuff your project doesn't depend on explicitly like
  transitive dependencies or dependencies of the plugins you use.  It
  may be necessary to add those to the Gump descriptor to achieve the
  correct build order.

* in general projects share the same local repository (which is
  removed after each Gump run).  If one project grabs an artifact from
  the proxy before the corresponding project has been built by Gump,
  this non-Gump artifact will never be replaced by the Gump-built one.

  The "Maven Repository Proxy Log" linked from every Gump page needs
  to be examined to find such cases.

  We have two options here:

  (1) add an <option> to the Gump descriptor to ensure the project is
      built after its dependencies

  (2) for projects where this is impossible (circular dependencies do
      exist, unfortunately), throw in separateLocalRepository="true"
      on the project's mvn tag.  This will give the project a sandbox
      to download artifacts to.

OK, I hope I managed to explain it.

Now, how does one debug a situation where the build passes locally
(ehen using the "correct" versions of all dependencies) but fails in
Gump (when using the latest trunk versions of almost all
dependencies)?

In some cases it may be possible to isolate the dependency that causes
the problem: mark your project with separateLocalRepository="true",
remove all dependencies and then add them back one by one (making sure
you add them in the same order they get built by Gump) watching the
Gump runs.  Given that a Gump runs every few hours this is a painfully
slow process.

The other option is to run mvn locally and manually overwrite jars in
your local repository with jars built by Gump - which means you'd
either have to run Gump yourself (you don't want to do that), build
your dependencies from trunk yourself or need the jars from the latest
Gump run.  Unfortunately we don't make those publically available
anymore (they've been used as nightly builds which is not really a
good idea for oh so many reasons), but it may be possible to make them
accessible to ASF committers more easily - for now the easiest way
probably is to ask on the Gump general list and we'll figure out a
short term solution.

Stefan

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to