
org.scijava.maven.plugin.RequireReproducibleBuilds Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of scijava-maven-plugin Show documentation
Show all versions of scijava-maven-plugin Show documentation
A plugin for managing SciJava-based projects.
/*
* #%L
* A plugin for managing SciJava-based projects.
* %%
* Copyright (C) 2014 - 2015 Board of Regents of the University of
* Wisconsin-Madison.
* %%
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
* #L%
*/
package org.scijava.maven.plugin;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.enforcer.rule.api.EnforcerRule;
import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.plugin.logging.Log;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.MavenProjectBuilder;
import org.apache.maven.project.ProjectBuildingException;
import org.apache.maven.shared.dependency.tree.DependencyTreeBuilder;
import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
/**
* A {@link EnforcerRule} wrapper for the {@link SnapshotFinder}.
*
* Parameters:
*
* - failFast - end execution after first failure (default: false)
* - groupIds - an inclusive comma-separated list of groupIds. Errors will
* only be reported for projects whose groupIds are contained this list.
* (default: null - all groupIds considered)
* - groupId - Singular groupIds option. Will be appended to groupIds if both
* are specified. (default: null)
*
*
*
* @author Mark Hiner
*/
public class RequireReproducibleBuilds implements EnforcerRule {
// -- Parameters --
private final boolean failFast = false;
private String groupId;
private String groupIds;
// -- EnforcerRule API methods --
/**
* Entry point for enforcer rule execution
*/
@Override
public void execute(final EnforcerRuleHelper helper)
throws EnforcerRuleException
{
final Log log = helper.getLog();
try {
final MavenProject project = (MavenProject) helper.evaluate("${project}");
final MavenSession session = (MavenSession) helper.evaluate("${session}");
final ArtifactRepository localRepository =
(ArtifactRepository) helper.evaluate("${localRepository}");
final MavenProjectBuilder projectBuilder =
(MavenProjectBuilder) helper.getComponent(MavenProjectBuilder.class);
final DependencyTreeBuilder treeBuilder =
(DependencyTreeBuilder) helper
.getComponent(DependencyTreeBuilder.class);
@SuppressWarnings("unchecked")
List reactorModules =
(List) helper.evaluate("${reactorProjects}");
try {
reactorModules =
DependencyUtils.findEffectiveReactor(reactorModules, session,
project, projectBuilder, localRepository);
}
catch (final ProjectBuildingException exc) {
log
.warn("Error during project construction:\n" + exc.getMessage(), exc);
}
// populate groupIds
final Set ids = new HashSet();
if (groupId != null) ids.add(groupId);
if (groupIds != null) {
for (final String id : groupIds.split(",")) {
ids.add(id);
}
}
// Enter recursive project checking
final SnapshotFinder fs =
new SnapshotFinder(projectBuilder, localRepository, project
.getRemoteArtifactRepositories());
fs.setLog(log);
fs.setFailFast(failFast);
fs.setGroupIds(ids);
fs.setReactorModules(reactorModules);
DependencyUtils.checkDependencies(project, localRepository, treeBuilder,
fs);
}
catch (final ComponentLookupException e) {
throw new EnforcerRuleException(e.getMessage());
}
catch (final ExpressionEvaluationException e) {
throw new EnforcerRuleException(e.getMessage());
}
catch (final SciJavaDependencyException e) {
throw new EnforcerRuleException(e.getMessage());
}
}
@Override
public boolean isCacheable() {
return false;
}
@Override
public boolean isResultValid(final EnforcerRule cachedRule) {
return false;
}
@Override
public String getCacheId() {
return null;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy