This page discusses emerging ideas of "clean up" of Maven project and it's related sub-projects.
General guidelines
Whenever you "touch" a project, would be good to perform following steps:
- Make sure Plexus
AbstractLogEnabled
is not used (extended), Maven since 3.x uses SLF4J instead. - Make sure ancient
org.codehaus.plexus:plexus-container-default
is NOT used as dependency IN ANY SCOPE. In general, all shared components should be migrated to JSR330, while use of Plexus Container MAY BE still needed in UTs (due Plexus Components present in dependencies). Then use Sisu Plexus Shim instead (but only in test scope):org.eclipse.sisu:org.eclipse.sisu.plexus
(currently 0.3.5, soon 1.0.0) - Make sure components in project use JSR330 annotations and not
org.codehaus.plexus:plexus-component-annotations
or EVEN WORSE, the Plexus QDox Javadoc annotations. - Drop use of Plexus Component Descriptor and
org.codehaus.plexus:plexus-component-metadata
plugin, and useorg.eclipse.sisu:sisu-maven-plugin
instead.
Maven
- ... should really drop Maven 2.x support (was it 10 years?), so maven-compat must go.
Maven Artifact Transfer
- this is widely used non-core, non-plugin, maybe "shared component".
- we need to keep it's "bridging" capability (see m-artifact-resolver 2.x plans, package renames again).
- unsure about what we want with this: given planned rename, resolver API should not be used directly in upcoming code changes?
Maven Plugins
- ... should really make up the 10 year lag, and stop depending on maven-compat stuff. Baseline for plugins should be Maven 3.1.x line.
- We must forget the "ill fated" Maven 3.0.x line, not only due org.sonatype/org.eclipse Resolver problem (m-artifact-transfer kinda covers it), but also due it's "sealed" Plexus/Sisu implementation and ancient version. We must comprehend, that we have no resources to support 10+ years spanning compatibility. Move on.
- (to be reviewed) mark Maven core dependencies as scope=provided
Maven SCM
Maven SCM is bloated and contains many providers we cannot test, given they bridging for are non OSS SCMs. Proposal: keep only those SCM providers that are OSS in Maven project, and provide a clear path for SCM integrators. Propose plan:
Phase 1
- mark as
@Deprecated
all except following providers: git (gitexe, jgit), svn (svnexe), mercurialmaven-scm-provider-accurev
- maven-scm-provider-bazaar
- maven-scm-provider-clearcase
- maven-scm-provider-integrity
- maven-scm-provider-jazz
- maven-scm-provider-perforce
- maven-scm-providers-cvs
- maven-scm-providers-standard (skim POM)
- maven-scm-provider-starteam
- maven-scm-provider-synergy
- maven-scm-provider-tfs
- maven-scm-provider-vss
- release as-is as next minor version
Phase 2 (post release)
- drop all deprecated modules/providers (incuding svnkit)
- up major version?
- make it Java 8?
- provide "clear path" (documentation, repository, mini-site?) for SCM integrators (prev codebase will be still available under release tag done in phase 1)
- Get rid of Plexus DI
Maven Wagon
Similarly, Wagon contains many providers we have no feedback whatsoever, or, we do have feedback but are dead-end (JSch/SSH).
Phase 1
- mark as
@Deprecated
all except following providers: file, http, ssh (sshexe), scm- wagon-ftp
- wagon-http-lightweight
- wagon-ssh
- wagon-webdav-jackrabbit
- release as-is as next minor version
Phase 2 (post release)
- drop all deprecated modules/providers
- up major version?
- make it Java 8?
- Wagon specific changes, like collapse DAV into HTTP (and drop webdav-jackrabbit), probably collapse http-shared into HTTP (as lightweight is gone as well)
- Get rid of Plexus DI
Questions
- if maven-compat goes away, how does Wagon fit/interface with Maven?
Maven Resolver
Phase 1
- release 1.7.0 (soon): DONE (Java8 + locking)
Phase 2 (post release)
- up major version (2.x)
- Drop
ServiceLocator
, removes a lot of cruft and "default ctors" - make all things proper ctor injection and final (lot of code breakage)
Phase 3 (later)
- Java package change from
org.eclipse.aether
toorg.apache.maven.resolver
?
Resolver and Maven
Maven version line | Java level | Plexus XML | Sisu index | Resolver | Latest release | ||
---|---|---|---|---|---|---|---|
Java package | Artifact GA | Version | |||||
3.0.x | 1.5 | Yes | No | org.sonatype.aether | org.sonatype.aether:aether-api | 1.11 | 3.0.5, 2013-02-19 |
3.1.x | 1.5 | Yes | Yes | org.eclipse.aether | org.eclipse.aether:aether-api | 0.9.0.M2 | 3.1.1, 2013-09-17 |
3.2.x | 1.6 | Yes | Yes | org.eclipse.aether | org.eclipse.aether:aether-api | 1.0.0.v20140518 | 3.2.5, 2014-12-14 |
3.3.x | 1.7 | Yes | Yes | org.eclipse.aether | org.eclipse.aether:aether-api | 1.0.2.v20150114 | 3.3.9, 2015-11-10 |
3.5.x | 1.7 | Yes | Yes | org.eclipse.aether | org.apache.maven.resolver:maven-resolver-api | 1.1.1 | 3.5.4, 2018-06-21 |
3.6.x | 1.7 | Yes | Yes | org.eclipse.aether | org.apache.maven.resolver:maven-resolver-api | 1.4.1 | 3.6.3, 2019-11-19 |
3.8.x | 1.7 | Yes | Yes | org.eclipse.aether | org.apache.maven.resolver:maven-resolver-api | 1.6.3 | 3.8.4, 2021-11-14 |
3.9.x ? | 1.8 | Yes | Yes | org.eclipse.aether | org.apache.maven.resolver:maven-resolver-api | 1.7.x | ? |
4.x ? | 1.8 | Yes | Yes | org.eclipse.aether | org.apache.maven.resolver:maven-resolver-api | 2.x | |
5.x ? | ? | No ? | Yes | org.apache.maven.resolver | org.apache.maven.resolver:maven-resolver-api | 3.x |
Note: this table contains latest releases only and just for quick reference. For details history of Maven, go to Maven Releases History page.
Maven Doxia
Phase 1
- mark as
@Deprecated
all except following providers: xdoc, fml, apt, markdown, asciidoc, xhtml, xhtml5doxia-logging-api
- doxia-module-confluence
- doxia-module-docbook-simple
- doxia-module-fo
- doxia-module-itext
- doxia-module-latex
- doxia-module-rtf
- doxia-module-twiki
- release as-is as next minor version
Phase 2 (post release)
- drop all deprecated modules/providers/classes
- up major version?
- make it Java 8?
- Get rid of Plexus DI
- Get rid of Doxia Logging
Maven Doxia Sitetool
Phase 1
- mark as
@Deprecated
all except following renderers: sitedoxia-doc-renderer
- release as-is as next minor version
Phase 2 (post release)
- drop all deprecated modules/providers/classes
- up major version?
- make it Java 8?
- Get rid of Plexus DI
- Get rid of Doxia Logging