A while back, I talked about moving to the
bndtools suite
of Maven plugins in preference to the
Felix
bundle plugin. The reason for this is better cross-IDE compatibility:
Eclipse only really works with bndtools
, whilst Intellij IDEA only
really works with the Felix maven-bundle-plugin
. This means that
the plugin you choose to use in your Maven project ends up dictating
which IDE developers must use in order to work with it. That's not
great! However, I discovered that Intellij IDEA could be configured to
use the OSGi manifest file that the bndtools
Maven plugin creates,
and therefore that means that developers can use either IDE as long
as I use the bndtools
plugins in my own projects.
Unfortunately, upon switching to the bndtools
plugin in the
primogenitor, I soon ran
into MNG-6059 and
MNG-5951. Briefly,
Maven has some baked-in behaviour that is intended to produce
metadata that follows the conventions people used when everyone used
SVN to manage source code. However,
those conventions result in Maven producing metadata that's essentially
incorrect with regards to modern conventions. Specifically, Maven will
automatically append module names to URIs specified in your project,
because it assumes that you've laid out files in a particular way on
remote servers. This automatic name appending could not previously be
turned off. However, Maven 3.6.0
provided support for some attributes
that you could place into your pom.xml
files that would disable
this automatic appending. Additionally, 3.6.0
comes with numerous
fixes for working with Java 11 bytecode. As I recently decided that
Java 11 was the new minimum version that I was going to support,
3.6.0
is really a requirement moving forward.
Unfortunately, this has now lead to further problems! One problem is
that it's not possible to push a pom.xml
file containing the new
attributes to Maven Central because the
version of Nexus
running on Central can't parse the new POM files yet. The second
problem is that the attributes are not inherited. I currently have over
850 pom.xml
files spread over close to a hundred projects. There's
just no way I'm going to edit each and every pom.xml
file and
add those attributes by hand. I want to specify them once in the
primogenitor
and have them apply everywhere. I've raised both points
on the Maven mailing list, and my cries have been heard. All of this
will hopefully be fixed in 3.6.1
.
After all is said and done, this means that I can't start moving
projects to Java 11 just yet or even do a full 3.0.0
release of
the primogenitor
because I need Maven 3.6.1
to do so. I wasn't
available to test 3.6.0
much before it was released, but I can do
plenty of testing for 3.6.1
. It looks like I'll temporarily be in
limbo for a couple of months!