Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,11 @@
<url>https://imagej.net/User:Hinerm</url>
<properties><id>hinerm</id></properties>
</contributor>
<contributor>
<name>Philipp Hanslovsky</name>
<url>https://github.com/hanslovsky</url>
<properties><id>hanslovsky</id></properties>
</contributor>
</contributors>

<mailingLists>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
Expand All @@ -52,6 +53,11 @@
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.project.MavenProject;
import org.apache.maven.shared.artifact.filter.resolve.AbstractFilter;
import org.apache.maven.shared.artifact.filter.resolve.AndFilter;
import org.apache.maven.shared.artifact.filter.resolve.Node;
import org.apache.maven.shared.artifact.filter.resolve.ScopeFilter;
import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
import org.codehaus.plexus.interpolation.EnvarBasedValueSource;
import org.codehaus.plexus.interpolation.ObjectBasedValueSource;
import org.codehaus.plexus.interpolation.PrefixAwareRecursionInterceptor;
Expand All @@ -68,6 +74,7 @@
*
* @author Johannes Schindelin
* @author Curtis Rueden
* @author Philipp Hanslovsky
*/
public abstract class AbstractInstallMojo extends AbstractMojo {

Expand Down Expand Up @@ -123,6 +130,7 @@ public abstract class AbstractInstallMojo extends AbstractMojo {
protected static final String DELETE_OTHER_VERSIONS_POLICY_PROPERTY = "scijava.deleteOtherVersions";
protected static final String SUBDIRECTORY_PATTERNS_PROPERTY = "scijava.subdirectoryPatterns";
protected static final String IGNORE_DEPENDENCIES_PROPERTY = "scijava.ignoreDependencies";
protected static final String IGNORE_OPTIONAL_DEPENDENCIES_PROPERTY = "scijava.ignoreOptionalDependencies";

public enum OtherVersions {
always, older, never
Expand Down Expand Up @@ -261,6 +269,29 @@ else if (newerVersion) {
}
}

protected static TransformableFilter makeTransformableFilterDefaultExclusions(
final boolean ignoreOptionalDependencies) {
return makeTransformableFilter(ignoreOptionalDependencies, "system", "provided", "test");
}

protected static TransformableFilter makeTransformableFilter(
final boolean ignoreOptionalDependencies,
String... excludedScopes) {
TransformableFilter scopeFilter = ScopeFilter.excluding(excludedScopes);
if (ignoreOptionalDependencies) {
TransformableFilter notOptionalFilter = new AbstractFilter() {
@Override
public boolean accept(Node node, List<Node> parents) {
return !node.getDependency().isOptional();
}
};
return new AndFilter(Arrays.asList(scopeFilter, notOptionalFilter));
}
else {
return scopeFilter;
}
}

private static String versionToString(final String v) {
return v == null || v.isEmpty() ? "(none)" : v;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Properties;
Expand All @@ -55,10 +54,6 @@
import org.apache.maven.project.ProjectBuildingException;
import org.apache.maven.project.ProjectBuildingRequest;
import org.apache.maven.project.ProjectBuildingResult;
import org.apache.maven.shared.artifact.filter.resolve.AbstractFilter;
import org.apache.maven.shared.artifact.filter.resolve.AndFilter;
import org.apache.maven.shared.artifact.filter.resolve.Node;
import org.apache.maven.shared.artifact.filter.resolve.ScopeFilter;
import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
import org.apache.maven.shared.artifact.resolve.ArtifactResolver;
import org.apache.maven.shared.artifact.resolve.ArtifactResult;
Expand All @@ -83,6 +78,7 @@
*
* @author Johannes Schindelin
* @author Stefan Helfrich
* @author Philipp Hanslovsky
*/
@Mojo(name = "install-artifact", requiresProject=false)
public class InstallArtifactMojo extends AbstractInstallMojo {
Expand Down Expand Up @@ -171,6 +167,12 @@ public class InstallArtifactMojo extends AbstractInstallMojo {
@Parameter(property = "force")
private boolean force;

/**
* If this option is set to <code>true</code>, optional dependencies will not be installed.
*/
@Parameter(property = IGNORE_OPTIONAL_DEPENDENCIES_PROPERTY, defaultValue = "true")
private boolean ignoreOptionalDependencies;

/**
* The coordinate use for resolving dependencies.
*/
Expand Down Expand Up @@ -240,14 +242,8 @@ public void execute() throws MojoExecutionException, MojoFailureException {
buildingRequest.setLocalRepository(localRepository);
buildingRequest.setRemoteRepositories(repoList);

TransformableFilter scopeFilter = ScopeFilter.excluding("system", "provided", "test");
TransformableFilter notOptionalFilter = new AbstractFilter() {
@Override
public boolean accept(Node node, List<Node> parents) {
return !node.getDependency().isOptional();
}
};
TransformableFilter scopeAndNotOptionalFilter = new AndFilter(Arrays.asList(scopeFilter, notOptionalFilter));
final TransformableFilter scopeAndNotOptionalFilter =
makeTransformableFilterDefaultExclusions(ignoreOptionalDependencies);

Iterable<ArtifactResult> resolveDependencies = dependencyResolver
.resolveDependencies(buildingRequest, coordinate, scopeAndNotOptionalFilter);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@
import org.apache.maven.project.ProjectBuildingException;
import org.apache.maven.project.ProjectBuildingRequest;
import org.apache.maven.project.ProjectBuildingResult;
import org.apache.maven.shared.artifact.filter.resolve.ScopeFilter;
import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
import org.apache.maven.shared.artifact.resolve.ArtifactResult;
import org.apache.maven.shared.dependencies.DefaultDependableCoordinate;
Expand All @@ -66,6 +65,7 @@
*
* @author Johannes Schindelin
* @author Stefan Helfrich
* @author Philipp Hanslovsky
*/
@Mojo(name = "populate-app", requiresProject = true, requiresOnline = true)
public class PopulateAppMojo extends AbstractInstallMojo {
Expand All @@ -76,6 +76,12 @@ public class PopulateAppMojo extends AbstractInstallMojo {
@Parameter(defaultValue = "${project}", required=true, readonly = true)
private MavenProject project;

/**
* If this option is set to <code>true</code>, optional dependencies will not be installed.
*/
@Parameter(property = IGNORE_OPTIONAL_DEPENDENCIES_PROPERTY, defaultValue = "false")
private boolean ignoreOptionalDependencies;

/**
* The dependency resolver to.
*/
Expand Down Expand Up @@ -119,13 +125,14 @@ public void execute() throws MojoExecutionException {
coordinate.setType(project.getPackaging());

try {
TransformableFilter scopeFilter = ScopeFilter.excluding("system", "provided", "test");
final TransformableFilter scopeAndNotOptionalFilter =
makeTransformableFilterDefaultExclusions(ignoreOptionalDependencies);

ProjectBuildingRequest buildingRequest = new DefaultProjectBuildingRequest(session.getProjectBuildingRequest());
buildingRequest.setProject( project );

Iterable<ArtifactResult> resolveDependencies = dependencyResolver
.resolveDependencies(buildingRequest, coordinate, scopeFilter);
.resolveDependencies(buildingRequest, coordinate, scopeAndNotOptionalFilter);
for (ArtifactResult result : resolveDependencies) {
Artifact artifact = result.getArtifact();
try {
Expand Down