Skip to content

Commit 09808ac

Browse files
authored
Convert to Guice constructor injection (#74)
* Prefer Guice constrcutor injection
1 parent e75fef4 commit 09808ac

File tree

6 files changed

+95
-34
lines changed

6 files changed

+95
-34
lines changed

pom.xml

+6
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,12 @@
148148
<artifactId>maven-plugin-annotations</artifactId>
149149
<scope>provided</scope>
150150
</dependency>
151+
<dependency>
152+
<groupId>javax.inject</groupId>
153+
<artifactId>javax.inject</artifactId>
154+
<version>1</version>
155+
<scope>provided</scope>
156+
</dependency>
151157
<dependency>
152158
<groupId>org.hamcrest</groupId>
153159
<artifactId>hamcrest-core</artifactId>

src/main/java/org/apache/maven/plugins/artifact/buildinfo/AbstractBuildinfoMojo.java

+23-16
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@
4343
import org.apache.maven.plugin.AbstractMojo;
4444
import org.apache.maven.plugin.MojoExecutionException;
4545
import org.apache.maven.plugin.logging.Log;
46-
import org.apache.maven.plugins.annotations.Component;
4746
import org.apache.maven.plugins.annotations.Parameter;
4847
import org.apache.maven.project.MavenProject;
4948
import org.apache.maven.rtinfo.RuntimeInformation;
@@ -57,11 +56,6 @@
5756
* @since 3.2.0
5857
*/
5958
public abstract class AbstractBuildinfoMojo extends AbstractMojo {
60-
/**
61-
* The Maven project.
62-
*/
63-
@Component
64-
protected MavenProject project;
6559

6660
/**
6761
* Location of the generated buildinfo file.
@@ -109,12 +103,6 @@ public abstract class AbstractBuildinfoMojo extends AbstractMojo {
109103
@Parameter(property = "buildinfo.reproducible", defaultValue = "false")
110104
private boolean reproducible;
111105

112-
/**
113-
* The current build session instance. This is used for toolchain manager API calls.
114-
*/
115-
@Component
116-
protected MavenSession session;
117-
118106
/**
119107
* Timestamp for reproducible output archive entries, either formatted as ISO 8601
120108
* <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 {
136124
/**
137125
* To obtain a toolchain if possible.
138126
*/
139-
@Component
140-
private ToolchainManager toolchainManager;
127+
private final ToolchainManager toolchainManager;
128+
129+
protected final RuntimeInformation rtInformation;
130+
131+
/**
132+
* The Maven project.
133+
*/
134+
protected final MavenProject project;
141135

142-
@Component
143-
protected RuntimeInformation rtInformation;
136+
/**
137+
* The current build session instance. This is used for toolchain manager API calls.
138+
*/
139+
protected final MavenSession session;
140+
141+
protected AbstractBuildinfoMojo(
142+
ToolchainManager toolchainManager,
143+
RuntimeInformation rtInformation,
144+
MavenProject project,
145+
MavenSession session) {
146+
this.toolchainManager = toolchainManager;
147+
this.rtInformation = rtInformation;
148+
this.project = project;
149+
this.session = session;
150+
}
144151

145152
@Override
146153
public void execute() throws MojoExecutionException {

src/main/java/org/apache/maven/plugins/artifact/buildinfo/BuildinfoMojo.java

+18-3
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,19 @@
1818
*/
1919
package org.apache.maven.plugins.artifact.buildinfo;
2020

21+
import javax.inject.Inject;
22+
2123
import java.util.Map;
2224

25+
import org.apache.maven.execution.MavenSession;
2326
import org.apache.maven.plugin.MojoExecutionException;
24-
import org.apache.maven.plugins.annotations.Component;
2527
import org.apache.maven.plugins.annotations.LifecyclePhase;
2628
import org.apache.maven.plugins.annotations.Mojo;
2729
import org.apache.maven.plugins.annotations.Parameter;
30+
import org.apache.maven.project.MavenProject;
2831
import org.apache.maven.project.MavenProjectHelper;
32+
import org.apache.maven.rtinfo.RuntimeInformation;
33+
import org.apache.maven.toolchain.ToolchainManager;
2934
import org.eclipse.aether.artifact.Artifact;
3035

3136
/**
@@ -44,8 +49,18 @@ public class BuildinfoMojo extends AbstractBuildinfoMojo {
4449
/**
4550
* Used for attaching the buildinfo file in the project.
4651
*/
47-
@Component
48-
private MavenProjectHelper projectHelper;
52+
private final MavenProjectHelper projectHelper;
53+
54+
@Inject
55+
public BuildinfoMojo(
56+
ToolchainManager toolchainManager,
57+
RuntimeInformation runtimeInformation,
58+
MavenProject project,
59+
MavenSession session,
60+
MavenProjectHelper projectHelper) {
61+
super(toolchainManager, runtimeInformation, project, session);
62+
this.projectHelper = projectHelper;
63+
}
4964

5065
@Override
5166
public void execute(Map<Artifact, String> artifacts) throws MojoExecutionException {

src/main/java/org/apache/maven/plugins/artifact/buildinfo/CheckBuildPlanMojo.java

+12-7
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
*/
1919
package org.apache.maven.plugins.artifact.buildinfo;
2020

21+
import javax.inject.Inject;
22+
2123
import java.io.File;
2224
import java.io.IOException;
2325
import java.io.InputStream;
@@ -34,7 +36,6 @@
3436
import org.apache.maven.plugin.AbstractMojo;
3537
import org.apache.maven.plugin.MojoExecution;
3638
import org.apache.maven.plugin.MojoExecutionException;
37-
import org.apache.maven.plugins.annotations.Component;
3839
import org.apache.maven.plugins.annotations.Mojo;
3940
import org.apache.maven.plugins.annotations.Parameter;
4041
import org.apache.maven.project.MavenProject;
@@ -50,14 +51,11 @@
5051
*/
5152
@Mojo(name = "check-buildplan", threadSafe = true, requiresProject = true)
5253
public class CheckBuildPlanMojo extends AbstractMojo {
53-
@Component
54-
private MavenProject project;
54+
private final MavenProject project;
5555

56-
@Component
57-
private MavenSession session;
56+
private final MavenSession session;
5857

59-
@Component
60-
private LifecycleExecutor lifecycleExecutor;
58+
private final LifecycleExecutor lifecycleExecutor;
6159

6260
/** Allow to specify which goals/phases will be used to calculate execution plan. */
6361
@Parameter(property = "check.buildplan.tasks", defaultValue = "deploy")
@@ -93,6 +91,13 @@ public class CheckBuildPlanMojo extends AbstractMojo {
9391

9492
private final VersionScheme versionScheme = new GenericVersionScheme();
9593

94+
@Inject
95+
public CheckBuildPlanMojo(MavenProject project, MavenSession session, LifecycleExecutor lifecycleExecutor) {
96+
this.project = project;
97+
this.session = session;
98+
this.lifecycleExecutor = lifecycleExecutor;
99+
}
100+
96101
protected MavenExecutionPlan calculateExecutionPlan() throws MojoExecutionException {
97102
try {
98103
return lifecycleExecutor.calculateExecutionPlan(session, tasks);

src/main/java/org/apache/maven/plugins/artifact/buildinfo/CompareMojo.java

+21-7
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
*/
1919
package org.apache.maven.plugins.artifact.buildinfo;
2020

21+
import javax.inject.Inject;
22+
2123
import java.io.BufferedWriter;
2224
import java.io.File;
2325
import java.io.IOException;
@@ -31,12 +33,14 @@
3133
import java.util.Map;
3234
import java.util.Properties;
3335

36+
import org.apache.maven.execution.MavenSession;
3437
import org.apache.maven.plugin.MojoExecutionException;
35-
import org.apache.maven.plugins.annotations.Component;
3638
import org.apache.maven.plugins.annotations.Mojo;
3739
import org.apache.maven.plugins.annotations.Parameter;
3840
import org.apache.maven.project.MavenProject;
41+
import org.apache.maven.rtinfo.RuntimeInformation;
3942
import org.apache.maven.shared.utils.logging.MessageUtils;
43+
import org.apache.maven.toolchain.ToolchainManager;
4044
import org.eclipse.aether.RepositorySystem;
4145
import org.eclipse.aether.RepositorySystemSession;
4246
import org.eclipse.aether.artifact.Artifact;
@@ -74,12 +78,6 @@ public class CompareMojo extends AbstractBuildinfoMojo {
7478
@Parameter(property = "compare.aggregate.only", defaultValue = "false")
7579
private boolean aggregateOnly;
7680

77-
/**
78-
* The entry point to Maven Artifact Resolver, i.e. the component doing all the work.
79-
*/
80-
@Component
81-
private RepositorySystem repoSystem;
82-
8381
/**
8482
* The current repository/network configuration of Maven.
8583
*/
@@ -99,6 +97,22 @@ public class CompareMojo extends AbstractBuildinfoMojo {
9997
@Parameter(property = "compare.fail", defaultValue = "true")
10098
private boolean fail;
10199

100+
/**
101+
* The entry point to Maven Artifact Resolver, i.e. the component doing all the work.
102+
*/
103+
private final RepositorySystem repoSystem;
104+
105+
@Inject
106+
public CompareMojo(
107+
ToolchainManager toolchainManager,
108+
RuntimeInformation rtInformation,
109+
MavenProject project,
110+
MavenSession session,
111+
RepositorySystem repoSystem) {
112+
super(toolchainManager, rtInformation, project, session);
113+
this.repoSystem = repoSystem;
114+
}
115+
102116
@Override
103117
public void execute(Map<Artifact, String> artifacts) throws MojoExecutionException {
104118
getLog().info("Checking against reference build from " + referenceRepo + "...");

src/main/java/org/apache/maven/plugins/artifact/buildinfo/DescribeBuildOutputMojo.java

+15-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
*/
1919
package org.apache.maven.plugins.artifact.buildinfo;
2020

21+
import javax.inject.Inject;
22+
2123
import java.io.File;
2224
import java.io.IOException;
2325
import java.io.InputStream;
@@ -35,22 +37,34 @@
3537
import org.apache.commons.codec.digest.DigestUtils;
3638
import org.apache.maven.RepositoryUtils;
3739
import org.apache.maven.archiver.MavenArchiver;
40+
import org.apache.maven.execution.MavenSession;
3841
import org.apache.maven.plugin.MojoExecutionException;
3942
import org.apache.maven.plugins.annotations.Mojo;
4043
import org.apache.maven.project.MavenProject;
44+
import org.apache.maven.rtinfo.RuntimeInformation;
4145
import org.apache.maven.shared.utils.logging.MessageUtils;
46+
import org.apache.maven.toolchain.ToolchainManager;
4247
import org.eclipse.aether.artifact.Artifact;
4348
import org.eclipse.aether.artifact.DefaultArtifact;
4449

4550
/**
4651
* Describe build output (experimental).
47-
* It is expected to be used aggregator used from CLI, ie run at root after everything has run, but not bound to any build
52+
* 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
4853
* phase, where it would be run at root before modules.
4954
* @since 3.5.2
5055
*/
5156
@Mojo(name = "describe-build-output", aggregator = true, threadSafe = true)
5257
public class DescribeBuildOutputMojo extends AbstractBuildinfoMojo {
5358

59+
@Inject
60+
public DescribeBuildOutputMojo(
61+
ToolchainManager toolchainManager,
62+
RuntimeInformation rtInformation,
63+
MavenProject project,
64+
MavenSession session) {
65+
super(toolchainManager, rtInformation, project, session);
66+
}
67+
5468
@Override
5569
public void execute() throws MojoExecutionException {
5670
// super.execute(); // do not generate buildinfo, just reuse logic from abstract class

0 commit comments

Comments
 (0)