Skip to content

Commit 601f5f4

Browse files
committed
Use effective reactor in SnapshotFinder
The RequireReproducibleBuilds enforcer rule and VerifyNoSnapshots mojo now attempt to use the effective reactor instead of the invocation-based reactor as defined by the framework. This should allow multi-module projects that maintain internal SNAPSHOT couplings to build individual submodules, provided: * They are fully connected via parent/module linkages * The complete multi-module project is on disk This is necessary for use cases such as the Eclipse m2e plugin, which flattens multi-module projects to individual builds. Note that the Maven model allows multi-module configuration where the aggregator is not a parent of any of its modules. In this case, since the submodules have no reference to their aggregator, SNAPSHOT couplings must be prohibited. Closes #12
1 parent c145867 commit 601f5f4

File tree

2 files changed

+34
-4
lines changed

2 files changed

+34
-4
lines changed

src/main/java/org/scijava/maven/plugin/RequireReproducibleBuilds.java

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,11 @@
3838
import org.apache.maven.enforcer.rule.api.EnforcerRule;
3939
import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
4040
import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
41+
import org.apache.maven.execution.MavenSession;
4142
import org.apache.maven.plugin.logging.Log;
4243
import org.apache.maven.project.MavenProject;
4344
import org.apache.maven.project.MavenProjectBuilder;
45+
import org.apache.maven.project.ProjectBuildingException;
4446
import org.apache.maven.shared.dependency.tree.DependencyTreeBuilder;
4547
import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
4648
import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
@@ -81,18 +83,29 @@ public void execute(final EnforcerRuleHelper helper)
8183
final Log log = helper.getLog();
8284
try {
8385
final MavenProject project = (MavenProject) helper.evaluate("${project}");
86+
final MavenSession session = (MavenSession) helper.evaluate("${session}");
8487
final ArtifactRepository localRepository =
8588
(ArtifactRepository) helper.evaluate("${localRepository}");
86-
87-
@SuppressWarnings("unchecked")
88-
final List<MavenProject> reactorModules =
89-
(List<MavenProject>) helper.evaluate("${reactorProjects}");
9089
final MavenProjectBuilder projectBuilder =
9190
(MavenProjectBuilder) helper.getComponent(MavenProjectBuilder.class);
9291
final DependencyTreeBuilder treeBuilder =
9392
(DependencyTreeBuilder) helper
9493
.getComponent(DependencyTreeBuilder.class);
9594

95+
@SuppressWarnings("unchecked")
96+
List<MavenProject> reactorModules =
97+
(List<MavenProject>) helper.evaluate("${reactorProjects}");
98+
99+
try {
100+
reactorModules =
101+
DependencyUtils.findEffectiveReactor(reactorModules, session,
102+
project, projectBuilder, localRepository);
103+
}
104+
catch (ProjectBuildingException exc) {
105+
log
106+
.warn("Error during project construction:\n" + exc.getMessage(), exc);
107+
}
108+
96109
// populate groupIds
97110
final Set<String> ids = new HashSet<String>();
98111
if (groupId != null) ids.add(groupId);
@@ -140,4 +153,5 @@ public boolean isResultValid(final EnforcerRule cachedRule) {
140153
public String getCacheId() {
141154
return null;
142155
}
156+
143157
}

src/main/java/org/scijava/maven/plugin/VerifyNoSnapshotsMojo.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,13 @@
3535
import java.util.Set;
3636

3737
import org.apache.maven.artifact.repository.ArtifactRepository;
38+
import org.apache.maven.execution.MavenSession;
3839
import org.apache.maven.plugin.AbstractMojo;
3940
import org.apache.maven.plugin.MojoExecutionException;
4041
import org.apache.maven.plugin.MojoFailureException;
4142
import org.apache.maven.project.MavenProject;
4243
import org.apache.maven.project.MavenProjectBuilder;
44+
import org.apache.maven.project.ProjectBuildingException;
4345
import org.apache.maven.shared.dependency.tree.DependencyTreeBuilder;
4446

4547
/**
@@ -63,6 +65,9 @@ public class VerifyNoSnapshotsMojo extends AbstractMojo {
6365

6466
// -- Parameters --
6567

68+
/** @parameter default-value="${session}" */
69+
private MavenSession mavenSession;
70+
6671
/** @parameter default-value="${project}" */
6772
private MavenProject mavenProject;
6873

@@ -99,6 +104,17 @@ public class VerifyNoSnapshotsMojo extends AbstractMojo {
99104
@Override
100105
public void execute() throws MojoExecutionException, MojoFailureException {
101106

107+
108+
try {
109+
reactorModules =
110+
DependencyUtils.findEffectiveReactor(reactorModules, mavenSession,
111+
mavenProject, projectBuilder, localRepository);
112+
}
113+
catch (ProjectBuildingException exc) {
114+
getLog()
115+
.warn("Error during project construction:\n" + exc.getMessage(), exc);
116+
}
117+
102118
// Enter recursive project checking
103119
final SnapshotFinder fs =
104120
new SnapshotFinder(projectBuilder, localRepository, mavenProject

0 commit comments

Comments
 (0)