MNG-8072 - add ConsumerPomFile methods

Currently there is some vague definition of a "build pom" versus a
"consumer pom":

    https://maven.apache.org/studies/consumer-pom/
    https://cwiki.apache.org/confluence/display/MAVEN/Build+vs+Consumer+POM

there are also some plugins around to work with this e.g.

    https://tycho.eclipseprojects.io/doc/latest/tycho-packaging-plugin/update-consumer-pom-mojo.html
    https://www.mojohaus.org/flatten-maven-plugin/plugin-info.html

but there are some issues:

    Maven makes some assumptions about its "file", e.g setting the file
changes the basedir
    Even though there is a setPomFile method that do not change the
basedir e.g. a parent ref by default would be broken
    once we change the file, there is a mismatch between the pom on disk
and the model
    it is not possible for a plugin to know the original file and the
consumer file, e.g. if I want to deploy the original file e.g. with
classifier "pom-build"
    because of this usually "consumer pom plugins" generate the the new
pom to a new file in the project root, where it actually not belongs to
and leaves the file even after mvn clean if no special actions are
taken.

This enhance the MavenProject with one more method set/getConsumerPom
that fills this gap, then plugins working on the consumer pom can set
the file there and where it then is used by other plugins.
This commit is contained in:
Christoph Läubrich 2024-03-10 09:24:02 +01:00
parent f860a8693d
commit aac4d9a5bb
1 changed files with 15 additions and 0 deletions

View File

@ -103,6 +103,8 @@ public class MavenProject implements Cloneable {
private File file;
private File consumerPomFile;
private File basedir;
private Set<Artifact> resolvedArtifacts;
@ -256,6 +258,17 @@ public class MavenProject implements Cloneable {
this.file = file;
}
public void setConsumerPomFile(File file) {
this.consumerPomFile = file;
}
public File getConsumerPomFile() {
if (consumerPomFile == null) {
return getFile();
}
return consumerPomFile;
}
public File getBasedir() {
return basedir;
}
@ -784,6 +797,7 @@ public class MavenProject implements Cloneable {
* @deprecated Please use {@link MavenProjectHelper}
* @throws DuplicateArtifactAttachmentException will never happen but leave it for backward compatibility
*/
@Deprecated
public void addAttachedArtifact(Artifact artifact) throws DuplicateArtifactAttachmentException {
// if already there we remove it and add again
int index = attachedArtifacts.indexOf(artifact);
@ -1026,6 +1040,7 @@ public class MavenProject implements Cloneable {
// copy fields
file = project.file;
this.consumerPomFile = project.consumerPomFile;
basedir = project.basedir;
// don't need a deep copy, they don't get modified or added/removed to/from - but make them unmodifiable to be