If your local build fails, but you can build the same sources with upstream Maven then you can use xmvn-bisect tool to debug your build.
This command will first build your project in pure local and pure upstream modes and then try different combinations of upstream and local artifacts. It will point to two builds that differ only by one dependency. Normally one of the builds will be successful and the other one failed. Diff between these build logs can be very helpful when debugging build failure.
To use xmvn-bisect tool to debug build failure of a project the following conditions must be met (hard requirements):
XMvn Bisect can give poor results unless the following conditions are met (soft requirements):
Before you start debugging a project with xmvn-bisect it is recommended that you clean local repositories (like $HOME/.m2 and $PWD/.xm2) from any artifacts which are present in the reactor, if possible. This may be impossible if the project being built depends on itself.
It is also recommended to build the project from upstream repository attempting to run xmvn-bisect. This will cause any dependency artifacts to be downloaded and cached in local repository. After this step is complete xmvn-bisect can be ran in offline mode. Doing this should reduce pollution of build logs (otherwise some logs might contain lines informing about artifacts being downloaded) and reduce hazard in general (for example upstream artifact being accidentally used instead of local one).
XMvn Bisect supports most of standard Maven command-line options. Run xmvn-bisect -h to see the full list of supported command-line options along with their meanings.
In most cases building project with XMvn Bisect is as simple as using standard Maven command and replacing mvn with xmvn-bisect, for example xmvn-bisect clean compile or xmvn-bisect -o -X -P jdk7 -Dmaven.test.skip=true clean verify.
Upon successful completion of the command there should be several build logs in current working directory. Name of the logs are prefixed with bisect-. Two builds, usually one failed and one successful, should be pointed to. A command to see the diff between two build logs should also be given. For example:
[INFO] Failed build: 14, see bisect-build-14.log [INFO] Successful build: 15, see bisect-build-15.log [INFO] Try: [INFO] $ git diff --no-index --color bisect-build-14.log bisect-build-15.log
The diff between two build logs can be examined to look for differences that could cause build failure.
It is recommended to enable Maven debugging output (option -X) when debugging builds with XMvn Bisect. This doesn't affect XMvn Bisect run itself, but may help investigating the cause of the build failure.
Usually Maven Clean Plugin should be part of the build sequence. XMvn Bisect runs all the builds from the same working directory. Results of previous builds, if not cleaned properly, may interfere with next builds and negatively affect the build. To reduce interference it's usually good to run clean as the first goal.