Note: I am posting this on dev@ rather than general@incubator to keep the
noise down and hoping that someone willing to help us can subscribe to our
dev@.

The Memory repository is the first one that we are migrating to Apache
because it has virtually no dependencies and other repositories in the
DataSketches library have dependencies on Memory.  Thus, this is where we
are doing our learning on how to migrate a repository to Apache.  Once we
get this one right, it shouldn't be too hard to migrate the remaining repos.

The main area where we could use some help is with configuring Maven /
pom.xml to do the right thing.  None of us on our little team are Maven
experts so could use some help from  someone with a lot of experience with
Maven and the Apache release process.

So far, in order to simplify the process I have set up a [bash script](
https://github.com/apache/incubator-datasketches-memory/blob/master/scripts/bashDeployToDist.sh)
to manage the release to dist.apache.org.
It does not rely on the pom at all and assembles the .zip file, signs it
and uploads it to dist using SVN.  I found this much easier than wrestling
with Maven.

Placing artifacts into Nexus, I am using _mvn deploy_ instead of the normal
Maven release process.  One of the reasons for using deploy is that, for
now, I want to manually change the version number and suffixes. The Maven
release plugin changes those and commits intermediate copies into the base
directory, etc. Messy.

The big disadvantage of not using Maven is all the checks that the various
plugins can do for you, e.g., rat-plugin, strict compilation, checkstyle,
etc.  So with the current state, we are relying on whoever is the "release
engineer" (currently, me!) to perform all these checks prior to running the
bash script anyway.

So it seems that eventually, either we need to go whole hog having Maven do
everything, which seems overly complicated, or consider moving to Gradle
(which I am not familiar with either, but it seems lots of teams are moving
that way).

Either way I have very little confidence that our pom.xml is properly set
up.  Here are a few immediate questions:

- It doesn't appear that the Nexus artifacts require a GPG signature only
the DIST assembly requires GPG, which the script is handling.  So why do we
need the gpg-plugin?

- It is not clear to me when a profile should be used (e.g., for deploy) vs
using the deploy process as part of the pom main build lifecycle.

I have studied the pom files of Druid, Beam 2.2.0, 2.4.0 (before they moved
to Gradle), Dubbo, Pinot, Commons-CSV, and of course the Apache Parent Pom
and the Maven super pom in my attempts to understand how to wrestle this
beast down to the mat.

Alas, all of them are very different and the Maven documentation on the
plugins sucks (many parameters are missing or poorly documented so I have
had to dig up the plug-in source code to try to figure out what some
parameters/arguments do.

Just having someone look over our pom file would be a big help.

Any advice or help would be appreciated.

Reply via email to