[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

The state of Maven



Hi all,

As you may have noticed I have updated many Maven related packages
recently, and I'd like to summarize quickly what I'm doing and where
we're heading.

Maven in testing/unstable is currently at the latest upstream release
(3.5.0). The most visible change since Maven 3.3.9 is the colored
console output which is really nice (except for the builder logs, they
are now cluttered with ANSI escape code and I don't know if there is a
way to avoid that). If time allows I'll try to backport this version to
Stretch.

Our version of Maven is almost on par with upstream. The only difference
is the default version of the plugins used since we've aligned them with
the versions in Debian to avoid build failures. For example someone
using our package in unstable to build its projects uses the
maven-compiler-plugin 3.6.1 by default instead of the version 3.1 with
the upstream binary, therefore the build may behave slightly
differently. I've figured out a simple solution to this problem: our
maven plugin packages now relocate the older version used by Maven to
the latest one (for example our package maven-compiler-plugin/3.6.1-2
redirects the version 3.1 to 3.6.1). This means we can leave the default
versions unchanged in our maven package, and still be able to build our
packages with the latest versions of the plugins. This change will
probably go live with the next update of the maven package.

After investigating a couple of Maven related libraries/plugins
responsible for build failures under Java 9 I realized that several
packages were lagging behind upstream, and some had Java 9 fixes ready
(such as maven-compiler-plugin 3.6.1). All Java 9 issues haven't been
addressed upstream yet, but we'll be better prepared to integrate the
Java 9 friendly versions if our packages are already up to date. For
this reason I've undertaken an update of all Maven/Plexus libraries and
plugins. This caused some disruptions, not all are resolved yet, but
fortunately I've managed to avoid the trap of breaking Maven completely
and being unable to fix it. That's the risk when playing with toolchain
packages that build depend on themselves ;) I'm currently waiting for
several packages in the NEW queue to move forward (the new
maven-reporting-api package will unlock ~10 plugin updates).

This update is also the opportunity to transition away from Maven 2.
Maven 2 is still in the archive in library form as libmaven2-core-java
and many plugins are still depending on it. This transition will allow
us to remove several libraries that were duplicated to support both
Maven 2 and Maven 3 (wagon vs wagon2, plexus-utils vs plexus-utils2,
plexus-classworlds vs plexus-classworlds2, plexus-containers vs
plexus-containers1.5, etc). I've already filed some removal requests and
there are more to come.

Once all of this is over I'd like to invest some time on
maven-debian-helper to better support multi module projects. I have 3
improvements in mind:
- Enable/disable the unit tests per module and not globally. I'm
thinking about an additional parameter in the debian/*.poms file that
would trigger the injection of a surefire configuration enabling or
disabling the tests.
- Build some modules without installing them. Sometimes modules contain
test helper classes used by other modules, and installing them pulls
many test libraries in the package dependencies.
- Resolve the dependencies per package, ${maven:Depends} would be
adapted to each binary package produced. This will allows us to easily
split several packages and have finer-grained dependencies.

With these changes I hope we'll able to better optimize the dependencies
of our applications. Our maven package was rather fat a few releases
ago, there was even a Launchpad bug rightfully complaining about it.
Here is the result of 'apt-get install maven' since Wheezy (with the JRE
already installed):
 wheezy:   129 packages, 95.3MB archives, 164MB on disk
 jessie:   118 packages, 59.5MB archives,  92MB on disk
 stretch:   82 packages, 29.8MB archives,  41MB on disk
 unstable:  56 packages, 23.0MB archives,  30MB on disk

The situation is improving but we can do better. The upstream binary for
Maven 3.5.0 weighs 8.2MB compressed, 10MB installed, so even with the
package overhead I expect to halve the current numbers.

Emmanuel Bourg


Reply to: