This is an automated email from the ASF dual-hosted git repository. elharo pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/maven-artifact-plugin.git
The following commit(s) were added to refs/heads/master by this push: new 09808ac Convert to Guice constructor injection (#74) 09808ac is described below commit 09808ac8f046ad61ff69ea920b3f383365f66230 Author: Elliotte Rusty Harold <elh...@users.noreply.github.com> AuthorDate: Fri Dec 13 11:48:56 2024 +0000 Convert to Guice constructor injection (#74) * Prefer Guice constrcutor injection --- pom.xml | 6 ++++ .../artifact/buildinfo/AbstractBuildinfoMojo.java | 39 +++++++++++++--------- .../plugins/artifact/buildinfo/BuildinfoMojo.java | 21 ++++++++++-- .../artifact/buildinfo/CheckBuildPlanMojo.java | 19 +++++++---- .../plugins/artifact/buildinfo/CompareMojo.java | 28 ++++++++++++---- .../buildinfo/DescribeBuildOutputMojo.java | 16 ++++++++- 6 files changed, 95 insertions(+), 34 deletions(-) diff --git a/pom.xml b/pom.xml index 69990c4..df8bf05 100644 --- a/pom.xml +++ b/pom.xml @@ -148,6 +148,12 @@ <artifactId>maven-plugin-annotations</artifactId> <scope>provided</scope> </dependency> + <dependency> + <groupId>javax.inject</groupId> + <artifactId>javax.inject</artifactId> + <version>1</version> + <scope>provided</scope> + </dependency> <dependency> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-core</artifactId> diff --git a/src/main/java/org/apache/maven/plugins/artifact/buildinfo/AbstractBuildinfoMojo.java b/src/main/java/org/apache/maven/plugins/artifact/buildinfo/AbstractBuildinfoMojo.java index 76f8678..952e5f5 100644 --- a/src/main/java/org/apache/maven/plugins/artifact/buildinfo/AbstractBuildinfoMojo.java +++ b/src/main/java/org/apache/maven/plugins/artifact/buildinfo/AbstractBuildinfoMojo.java @@ -43,7 +43,6 @@ import org.apache.maven.execution.MavenSession; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.logging.Log; -import org.apache.maven.plugins.annotations.Component; import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.project.MavenProject; import org.apache.maven.rtinfo.RuntimeInformation; @@ -57,11 +56,6 @@ import org.eclipse.aether.artifact.Artifact; * @since 3.2.0 */ public abstract class AbstractBuildinfoMojo extends AbstractMojo { - /** - * The Maven project. - */ - @Component - protected MavenProject project; /** * Location of the generated buildinfo file. @@ -109,12 +103,6 @@ public abstract class AbstractBuildinfoMojo extends AbstractMojo { @Parameter(property = "buildinfo.reproducible", defaultValue = "false") private boolean reproducible; - /** - * The current build session instance. This is used for toolchain manager API calls. - */ - @Component - protected MavenSession session; - /** * Timestamp for reproducible output archive entries, either formatted as ISO 8601 * <code>yyyy-MM-dd'T'HH:mm:ssXXX</code> or as an int representing seconds since the epoch (like @@ -136,11 +124,30 @@ public abstract class AbstractBuildinfoMojo extends AbstractMojo { /** * To obtain a toolchain if possible. */ - @Component - private ToolchainManager toolchainManager; + private final ToolchainManager toolchainManager; + + protected final RuntimeInformation rtInformation; + + /** + * The Maven project. + */ + protected final MavenProject project; - @Component - protected RuntimeInformation rtInformation; + /** + * The current build session instance. This is used for toolchain manager API calls. + */ + protected final MavenSession session; + + protected AbstractBuildinfoMojo( + ToolchainManager toolchainManager, + RuntimeInformation rtInformation, + MavenProject project, + MavenSession session) { + this.toolchainManager = toolchainManager; + this.rtInformation = rtInformation; + this.project = project; + this.session = session; + } @Override public void execute() throws MojoExecutionException { diff --git a/src/main/java/org/apache/maven/plugins/artifact/buildinfo/BuildinfoMojo.java b/src/main/java/org/apache/maven/plugins/artifact/buildinfo/BuildinfoMojo.java index 38a4b4e..8ceb512 100644 --- a/src/main/java/org/apache/maven/plugins/artifact/buildinfo/BuildinfoMojo.java +++ b/src/main/java/org/apache/maven/plugins/artifact/buildinfo/BuildinfoMojo.java @@ -18,14 +18,19 @@ */ package org.apache.maven.plugins.artifact.buildinfo; +import javax.inject.Inject; + import java.util.Map; +import org.apache.maven.execution.MavenSession; import org.apache.maven.plugin.MojoExecutionException; -import org.apache.maven.plugins.annotations.Component; import org.apache.maven.plugins.annotations.LifecyclePhase; import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; +import org.apache.maven.project.MavenProject; import org.apache.maven.project.MavenProjectHelper; +import org.apache.maven.rtinfo.RuntimeInformation; +import org.apache.maven.toolchain.ToolchainManager; import org.eclipse.aether.artifact.Artifact; /** @@ -44,8 +49,18 @@ public class BuildinfoMojo extends AbstractBuildinfoMojo { /** * Used for attaching the buildinfo file in the project. */ - @Component - private MavenProjectHelper projectHelper; + private final MavenProjectHelper projectHelper; + + @Inject + public BuildinfoMojo( + ToolchainManager toolchainManager, + RuntimeInformation runtimeInformation, + MavenProject project, + MavenSession session, + MavenProjectHelper projectHelper) { + super(toolchainManager, runtimeInformation, project, session); + this.projectHelper = projectHelper; + } @Override public void execute(Map<Artifact, String> artifacts) throws MojoExecutionException { diff --git a/src/main/java/org/apache/maven/plugins/artifact/buildinfo/CheckBuildPlanMojo.java b/src/main/java/org/apache/maven/plugins/artifact/buildinfo/CheckBuildPlanMojo.java index 637fd12..00a2fab 100644 --- a/src/main/java/org/apache/maven/plugins/artifact/buildinfo/CheckBuildPlanMojo.java +++ b/src/main/java/org/apache/maven/plugins/artifact/buildinfo/CheckBuildPlanMojo.java @@ -18,6 +18,8 @@ */ package org.apache.maven.plugins.artifact.buildinfo; +import javax.inject.Inject; + import java.io.File; import java.io.IOException; import java.io.InputStream; @@ -34,7 +36,6 @@ import org.apache.maven.model.Plugin; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecution; import org.apache.maven.plugin.MojoExecutionException; -import org.apache.maven.plugins.annotations.Component; import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.project.MavenProject; @@ -50,14 +51,11 @@ import org.eclipse.aether.version.VersionScheme; */ @Mojo(name = "check-buildplan", threadSafe = true, requiresProject = true) public class CheckBuildPlanMojo extends AbstractMojo { - @Component - private MavenProject project; + private final MavenProject project; - @Component - private MavenSession session; + private final MavenSession session; - @Component - private LifecycleExecutor lifecycleExecutor; + private final LifecycleExecutor lifecycleExecutor; /** Allow to specify which goals/phases will be used to calculate execution plan. */ @Parameter(property = "check.buildplan.tasks", defaultValue = "deploy") @@ -93,6 +91,13 @@ public class CheckBuildPlanMojo extends AbstractMojo { private final VersionScheme versionScheme = new GenericVersionScheme(); + @Inject + public CheckBuildPlanMojo(MavenProject project, MavenSession session, LifecycleExecutor lifecycleExecutor) { + this.project = project; + this.session = session; + this.lifecycleExecutor = lifecycleExecutor; + } + protected MavenExecutionPlan calculateExecutionPlan() throws MojoExecutionException { try { return lifecycleExecutor.calculateExecutionPlan(session, tasks); diff --git a/src/main/java/org/apache/maven/plugins/artifact/buildinfo/CompareMojo.java b/src/main/java/org/apache/maven/plugins/artifact/buildinfo/CompareMojo.java index 9cfd262..b7a4277 100644 --- a/src/main/java/org/apache/maven/plugins/artifact/buildinfo/CompareMojo.java +++ b/src/main/java/org/apache/maven/plugins/artifact/buildinfo/CompareMojo.java @@ -18,6 +18,8 @@ */ package org.apache.maven.plugins.artifact.buildinfo; +import javax.inject.Inject; + import java.io.BufferedWriter; import java.io.File; import java.io.IOException; @@ -31,12 +33,14 @@ import java.util.List; import java.util.Map; import java.util.Properties; +import org.apache.maven.execution.MavenSession; import org.apache.maven.plugin.MojoExecutionException; -import org.apache.maven.plugins.annotations.Component; import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.project.MavenProject; +import org.apache.maven.rtinfo.RuntimeInformation; import org.apache.maven.shared.utils.logging.MessageUtils; +import org.apache.maven.toolchain.ToolchainManager; import org.eclipse.aether.RepositorySystem; import org.eclipse.aether.RepositorySystemSession; import org.eclipse.aether.artifact.Artifact; @@ -74,12 +78,6 @@ public class CompareMojo extends AbstractBuildinfoMojo { @Parameter(property = "compare.aggregate.only", defaultValue = "false") private boolean aggregateOnly; - /** - * The entry point to Maven Artifact Resolver, i.e. the component doing all the work. - */ - @Component - private RepositorySystem repoSystem; - /** * The current repository/network configuration of Maven. */ @@ -99,6 +97,22 @@ public class CompareMojo extends AbstractBuildinfoMojo { @Parameter(property = "compare.fail", defaultValue = "true") private boolean fail; + /** + * The entry point to Maven Artifact Resolver, i.e. the component doing all the work. + */ + private final RepositorySystem repoSystem; + + @Inject + public CompareMojo( + ToolchainManager toolchainManager, + RuntimeInformation rtInformation, + MavenProject project, + MavenSession session, + RepositorySystem repoSystem) { + super(toolchainManager, rtInformation, project, session); + this.repoSystem = repoSystem; + } + @Override public void execute(Map<Artifact, String> artifacts) throws MojoExecutionException { getLog().info("Checking against reference build from " + referenceRepo + "..."); diff --git a/src/main/java/org/apache/maven/plugins/artifact/buildinfo/DescribeBuildOutputMojo.java b/src/main/java/org/apache/maven/plugins/artifact/buildinfo/DescribeBuildOutputMojo.java index 88f6681..ae7362f 100644 --- a/src/main/java/org/apache/maven/plugins/artifact/buildinfo/DescribeBuildOutputMojo.java +++ b/src/main/java/org/apache/maven/plugins/artifact/buildinfo/DescribeBuildOutputMojo.java @@ -18,6 +18,8 @@ */ package org.apache.maven.plugins.artifact.buildinfo; +import javax.inject.Inject; + import java.io.File; import java.io.IOException; import java.io.InputStream; @@ -35,22 +37,34 @@ import java.util.stream.Collectors; import org.apache.commons.codec.digest.DigestUtils; import org.apache.maven.RepositoryUtils; import org.apache.maven.archiver.MavenArchiver; +import org.apache.maven.execution.MavenSession; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.project.MavenProject; +import org.apache.maven.rtinfo.RuntimeInformation; import org.apache.maven.shared.utils.logging.MessageUtils; +import org.apache.maven.toolchain.ToolchainManager; import org.eclipse.aether.artifact.Artifact; import org.eclipse.aether.artifact.DefaultArtifact; /** * Describe build output (experimental). - * It is expected to be used aggregator used from CLI, ie run at root after everything has run, but not bound to any build + * It is expected to be used aggregator used from CLI; that is, run at root after everything has run, but not bound to any build * phase, where it would be run at root before modules. * @since 3.5.2 */ @Mojo(name = "describe-build-output", aggregator = true, threadSafe = true) public class DescribeBuildOutputMojo extends AbstractBuildinfoMojo { + @Inject + public DescribeBuildOutputMojo( + ToolchainManager toolchainManager, + RuntimeInformation rtInformation, + MavenProject project, + MavenSession session) { + super(toolchainManager, rtInformation, project, session); + } + @Override public void execute() throws MojoExecutionException { // super.execute(); // do not generate buildinfo, just reuse logic from abstract class