Class DuplicateElementStrategy
- All Implemented Interfaces:
UpgradeStrategy
Maven 4's stricter POM parser rejects duplicate XML elements (such as
<artifactId>, <properties>, <version>, etc.) that
Maven 3 silently accepted using last-wins semantics. This strategy scans
each POM element's children and removes duplicates, keeping only the last
occurrence of each element name.
This strategy only targets "scalar" elements at well-known POM schema
positions — elements that should appear at most once within their parent
according to the Maven POM schema. Elements inside list containers
(e.g., <dependency> inside <dependencies>,
<plugin> inside <plugins>) are not affected by this strategy
since duplicate dependencies and plugins are handled by
DeduplicateDependenciesStrategy.
Plugin <configuration> elements are skipped entirely, because they
contain free-form, plugin-specific XML whose schema is not known to this tool.
Treating same-named children as duplicates in configuration sections (e.g.,
multiple <arg> entries inside <compilerArgs>) would silently
remove valid list entries and break builds.
- See Also:
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected UpgradeResultdoApply(UpgradeContext context, Map<Path, eu.maveniverse.domtrip.Document> pomMap) Subclasses implement the actual upgrade logic here.Gets a description of what this strategy does.booleanisApplicable(UpgradeContext context) Checks if this strategy is applicable given the current options.Methods inherited from class AbstractUpgradeStrategy
apply, buildEffectiveModel, cleanupTempDirectory, computeAllArtifactCoordinates, createTempProjectStructure, extractArtifactCoordinatesWithParentResolution, findCommonRoot, getOptions, getSession, logSummaryMethods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface UpgradeStrategy
isOptionEnabled
-
Constructor Details
-
DuplicateElementStrategy
public DuplicateElementStrategy()
-
-
Method Details
-
isApplicable
Description copied from interface:UpgradeStrategyChecks if this strategy is applicable given the current options.- Parameters:
context- the upgrade context- Returns:
- true if this strategy should be applied
-
getDescription
Description copied from interface:UpgradeStrategyGets a description of what this strategy does.- Returns:
- a human-readable description of the strategy
-
doApply
protected UpgradeResult doApply(UpgradeContext context, Map<Path, eu.maveniverse.domtrip.Document> pomMap) Description copied from class:AbstractUpgradeStrategySubclasses implement the actual upgrade logic here.- Specified by:
doApplyin classAbstractUpgradeStrategy- Parameters:
context- the upgrade contextpomMap- map of all POM files in the project- Returns:
- the result of the upgrade operation
-