Default plugins:

• jacoco-maven-plugin
• license-maven-plugin (inherited=false)
• maven-compiler-plugin
• maven-enforcer-plugin
• maven-javadoc-plugin
• maven-source-plugin
• maven-surefire-plugin

Children still need to define:

• groupId, artifactId, version, packaging, (name), description
  ‣ name: either just ${project.artifactId} or unset, except when
    targetting Central, then: ${project.groupId}:${project.artifactId}
• url
• licenses: at least one <license>: name, url, (comments)
• developers: at least one <developer>: name, email, organization{,Url}, …
• organization (if not tarent): name, url
• (optionally)
  ‣ (inceptionYear)
  ‣ (mailingLists: mailingList: name, …)
  ‣ …
  ‣ properties (e.g. override some defaults)
    – archiver.copyright (Copyright © ${archiver.copyright.firstyear}–${archiver.copyright.lastyear}; Licensor: cf. version_vendor)
    – doclint.optappend (-Xdoclint:all)
    – javaRelease (8 (default) or 11)
      and possibly gmavenplus.javaRelease (1.8 (default) or 11)
    – maven.minimum.version (3.2)
    – sonar.sources, sonar.tests (both unset)
• scm: connection, developerConnection, url, tag (HEAD)
• distributionManagement: repository(, snapshotRepository): id, (name), url
  only if neither dstrepo-{central,tarent} profile are used
• (optionally)
  ‣ (modules)
  ‣ (profiles)
    ⇒ predefined:
      – dstrepo-central, dstrepo-tarent (for distributionManagement as above)
      – gpg
      – jdk8orolder (auto-activated)
	→ mockito.version := 2.10.0
	→ older maven-{compiler,javadoc}-plugin
      – jdk9ornewer (auto-activated)
      - jre-not-below-jdk (auto-activated), workaround for Debian bug #893388
      – with-implicit-dependencies (auto-activated), see below
• build: settings/resources, pluginManagement and plugins not listed above
• (dependencyManagement)
• (dependencies)

Your top-level POM may not use <dependencies> if you use the dependency
tooling (ckdep.sh and depsrc.sh) because these scripts need to be able
to use the POM, in some circumstances, as parent POM. They take care of
adjusting the <packaging>, but you’ll have to place dependencies into a
profile (with-implicit-dependencies) so they are not picked up by these
subtasks accidentally. For a simple example (a one-JAR library) see:
https://evolvis.org/plugins/scmgit/cgi-bin/gitweb.cgi?p=useful-scripts/rfc822.git;a=blob;f=pom.xml;hb=HEAD

Model: https://maven.apache.org/ref/current/maven-model/maven.html
Full POM reference: https://maven.apache.org/pom.html

Warning: resource filtering eats ${foo}, @foo@, plus ⚠ new: \$ and \@
Do diff all resources between their source and filtered form, not just
main/ but test/ as well, after adopting this parent POM! In resources,
filtered or not, symbolic links are followed, not copied.

Note: maven.antrun.version is only present because this is inherited
from the Super POM and never used and untested; similarily, we do not
use or test maven.site.version which is injected somehow.

Include org.evolvis.tartools:maven-parent-lib for java.util.logging
(jdk14 jul) initialisation using logger.properties from the classpath.

Using the Mycila licence plugin, you first run
	mvn com.mycila:license-maven-plugin:3.0:remove
and check files for remnants, update the header if necessary, run
	mvn com.mycila:license-maven-plugin:3.0:format
then finally check for files with ≥2 empty lines (either with
	# not funny-character-in-filename-safe
	git ls-files | while IFS= read -r name; do
		test -h "$name" || awk -v n=0 '
		    $0 == "" { if (++n == 2) { print FILENAME; exit; }; next; }
		    { n=0 }' "$name"
	done
replacing “git ls-files” with find if needed) or “git check-emptylines” from
http://www.mirbsd.org/cvs.cgi/contrib/hosted/tg/.gitconfig?rev=HEAD;content-type=text%2Fplain
(needs https://github.com/mirabilos/git-find and pcregrep), then
pipe those files through “cat -s” or “perl -00pe0” to drop those
double empty lines as files without a header may get them added.

Some description on ancillary tools:
• ckdep.sh determines dependencies and keeps them in ckdep.lst
  (used for manual licence analysis) and ckdep.mvn (used by
  depsrc.sh), based on scoping implication, reading ckdep.ins
  for shaded embedded code copies (such as ASM in byte-buddy,
  lombok, Spring), ckdep.inc for free-format dependencies such
  as JS files; must be manually enabled and maintained
• cksrc.sh is a configuration file for ckdep.sh, depsrc.sh and
  mksrc.sh, needed if any of them is used; well-commented but
  when reusing DON’T forget to toggle mvnprofiles
• depsrc.sh uses ckdep.mvn with depsrc.xml to create a PKZIP
  archive containing the sources (usually source JARs from
  Central, cksrc.sh can override) of dependencies shipped
• mksrc.sh, which also must be manually enabled as the above,
  archives the source code as present in git (and moves the
  result from depsrc.xml maven-assembly-plugin into place)
• mvnrepo.sh lists dependencies and plugins from the POM in the
  current working directory as links to mvnrepository.com for
  manual up-to-dateness checking in a browser
• sortdeps.sh sorts <dependencies> and <exclusions> that are
  piped through it (strip the surrounding tags and pass only
  the individual dependency/exclusion tags); postprocess the
  entire POM afterwards with: xmlstarlet fo -e UTF-8 -t -
• sortplug.sh does the same for <plugins> sorting any listed
  dependencies with the sortdeps script internally

You’ll need reasonably recent versions of coreutils, git, maven,
mksh, pax and xmlstarlet for most tools; although they have only
been tested on Debian, they should be pretty portable to similar
operating systems.
