Skip to content

Commit b2b62e7

Browse files
authored
Merge pull request #28 from scijava/add-switch-to-ignore-optional-dependencies
Add switch to ignore optional dependencies
2 parents a599c86 + 6765840 commit b2b62e7

File tree

4 files changed

+55
-16
lines changed

4 files changed

+55
-16
lines changed

pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,11 @@
6767
<url>https://imagej.net/User:Hinerm</url>
6868
<properties><id>hinerm</id></properties>
6969
</contributor>
70+
<contributor>
71+
<name>Philipp Hanslovsky</name>
72+
<url>https://github.com/hanslovsky</url>
73+
<properties><id>hanslovsky</id></properties>
74+
</contributor>
7075
</contributors>
7176

7277
<mailingLists>

src/main/java/org/scijava/maven/plugin/install/AbstractInstallMojo.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import java.nio.file.Path;
3636
import java.nio.file.Paths;
3737
import java.util.ArrayList;
38+
import java.util.Arrays;
3839
import java.util.Collections;
3940
import java.util.LinkedHashMap;
4041
import java.util.List;
@@ -52,6 +53,11 @@
5253
import org.apache.maven.plugin.MojoExecutionException;
5354
import org.apache.maven.plugins.annotations.Parameter;
5455
import org.apache.maven.project.MavenProject;
56+
import org.apache.maven.shared.artifact.filter.resolve.AbstractFilter;
57+
import org.apache.maven.shared.artifact.filter.resolve.AndFilter;
58+
import org.apache.maven.shared.artifact.filter.resolve.Node;
59+
import org.apache.maven.shared.artifact.filter.resolve.ScopeFilter;
60+
import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
5561
import org.codehaus.plexus.interpolation.EnvarBasedValueSource;
5662
import org.codehaus.plexus.interpolation.ObjectBasedValueSource;
5763
import org.codehaus.plexus.interpolation.PrefixAwareRecursionInterceptor;
@@ -68,6 +74,7 @@
6874
*
6975
* @author Johannes Schindelin
7076
* @author Curtis Rueden
77+
* @author Philipp Hanslovsky
7178
*/
7279
public abstract class AbstractInstallMojo extends AbstractMojo {
7380

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

127135
public enum OtherVersions {
128136
always, older, never
@@ -261,6 +269,29 @@ else if (newerVersion) {
261269
}
262270
}
263271

272+
protected static TransformableFilter makeTransformableFilterDefaultExclusions(
273+
final boolean ignoreOptionalDependencies) {
274+
return makeTransformableFilter(ignoreOptionalDependencies, "system", "provided", "test");
275+
}
276+
277+
protected static TransformableFilter makeTransformableFilter(
278+
final boolean ignoreOptionalDependencies,
279+
String... excludedScopes) {
280+
TransformableFilter scopeFilter = ScopeFilter.excluding(excludedScopes);
281+
if (ignoreOptionalDependencies) {
282+
TransformableFilter notOptionalFilter = new AbstractFilter() {
283+
@Override
284+
public boolean accept(Node node, List<Node> parents) {
285+
return !node.getDependency().isOptional();
286+
}
287+
};
288+
return new AndFilter(Arrays.asList(scopeFilter, notOptionalFilter));
289+
}
290+
else {
291+
return scopeFilter;
292+
}
293+
}
294+
264295
private static String versionToString(final String v) {
265296
return v == null || v.isEmpty() ? "(none)" : v;
266297
}

src/main/java/org/scijava/maven/plugin/install/InstallArtifactMojo.java

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
import java.io.File;
3333
import java.io.IOException;
3434
import java.util.ArrayList;
35-
import java.util.Arrays;
3635
import java.util.List;
3736
import java.util.Map;
3837
import java.util.Properties;
@@ -55,10 +54,6 @@
5554
import org.apache.maven.project.ProjectBuildingException;
5655
import org.apache.maven.project.ProjectBuildingRequest;
5756
import org.apache.maven.project.ProjectBuildingResult;
58-
import org.apache.maven.shared.artifact.filter.resolve.AbstractFilter;
59-
import org.apache.maven.shared.artifact.filter.resolve.AndFilter;
60-
import org.apache.maven.shared.artifact.filter.resolve.Node;
61-
import org.apache.maven.shared.artifact.filter.resolve.ScopeFilter;
6257
import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
6358
import org.apache.maven.shared.artifact.resolve.ArtifactResolver;
6459
import org.apache.maven.shared.artifact.resolve.ArtifactResult;
@@ -83,6 +78,7 @@
8378
*
8479
* @author Johannes Schindelin
8580
* @author Stefan Helfrich
81+
* @author Philipp Hanslovsky
8682
*/
8783
@Mojo(name = "install-artifact", requiresProject=false)
8884
public class InstallArtifactMojo extends AbstractInstallMojo {
@@ -171,6 +167,12 @@ public class InstallArtifactMojo extends AbstractInstallMojo {
171167
@Parameter(property = "force")
172168
private boolean force;
173169

170+
/**
171+
* If this option is set to <code>true</code>, optional dependencies will not be installed.
172+
*/
173+
@Parameter(property = IGNORE_OPTIONAL_DEPENDENCIES_PROPERTY, defaultValue = "true")
174+
private boolean ignoreOptionalDependencies;
175+
174176
/**
175177
* The coordinate use for resolving dependencies.
176178
*/
@@ -240,14 +242,8 @@ public void execute() throws MojoExecutionException, MojoFailureException {
240242
buildingRequest.setLocalRepository(localRepository);
241243
buildingRequest.setRemoteRepositories(repoList);
242244

243-
TransformableFilter scopeFilter = ScopeFilter.excluding("system", "provided", "test");
244-
TransformableFilter notOptionalFilter = new AbstractFilter() {
245-
@Override
246-
public boolean accept(Node node, List<Node> parents) {
247-
return !node.getDependency().isOptional();
248-
}
249-
};
250-
TransformableFilter scopeAndNotOptionalFilter = new AndFilter(Arrays.asList(scopeFilter, notOptionalFilter));
245+
final TransformableFilter scopeAndNotOptionalFilter =
246+
makeTransformableFilterDefaultExclusions(ignoreOptionalDependencies);
251247

252248
Iterable<ArtifactResult> resolveDependencies = dependencyResolver
253249
.resolveDependencies(buildingRequest, coordinate, scopeAndNotOptionalFilter);

src/main/java/org/scijava/maven/plugin/install/PopulateAppMojo.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@
4444
import org.apache.maven.project.ProjectBuildingException;
4545
import org.apache.maven.project.ProjectBuildingRequest;
4646
import org.apache.maven.project.ProjectBuildingResult;
47-
import org.apache.maven.shared.artifact.filter.resolve.ScopeFilter;
4847
import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
4948
import org.apache.maven.shared.artifact.resolve.ArtifactResult;
5049
import org.apache.maven.shared.dependencies.DefaultDependableCoordinate;
@@ -66,6 +65,7 @@
6665
*
6766
* @author Johannes Schindelin
6867
* @author Stefan Helfrich
68+
* @author Philipp Hanslovsky
6969
*/
7070
@Mojo(name = "populate-app", requiresProject = true, requiresOnline = true)
7171
public class PopulateAppMojo extends AbstractInstallMojo {
@@ -76,6 +76,12 @@ public class PopulateAppMojo extends AbstractInstallMojo {
7676
@Parameter(defaultValue = "${project}", required=true, readonly = true)
7777
private MavenProject project;
7878

79+
/**
80+
* If this option is set to <code>true</code>, optional dependencies will not be installed.
81+
*/
82+
@Parameter(property = IGNORE_OPTIONAL_DEPENDENCIES_PROPERTY, defaultValue = "false")
83+
private boolean ignoreOptionalDependencies;
84+
7985
/**
8086
* The dependency resolver to.
8187
*/
@@ -119,13 +125,14 @@ public void execute() throws MojoExecutionException {
119125
coordinate.setType(project.getPackaging());
120126

121127
try {
122-
TransformableFilter scopeFilter = ScopeFilter.excluding("system", "provided", "test");
128+
final TransformableFilter scopeAndNotOptionalFilter =
129+
makeTransformableFilterDefaultExclusions(ignoreOptionalDependencies);
123130

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

127134
Iterable<ArtifactResult> resolveDependencies = dependencyResolver
128-
.resolveDependencies(buildingRequest, coordinate, scopeFilter);
135+
.resolveDependencies(buildingRequest, coordinate, scopeAndNotOptionalFilter);
129136
for (ArtifactResult result : resolveDependencies) {
130137
Artifact artifact = result.getArtifact();
131138
try {

0 commit comments

Comments
 (0)