157 lines
5.7 KiB
Diff
157 lines
5.7 KiB
Diff
|
From d3c8d75d197ac8494c87f26ea63733d4f5163c7f Mon Sep 17 00:00:00 2001
|
||
|
From: Stanislav Ochotnicky <sochotnicky@redhat.com>
|
||
|
Date: Tue, 30 Aug 2011 11:44:42 +0200
|
||
|
Subject: [PATCH 4/4] Fix text scope skipping with maven.test.skip
|
||
|
|
||
|
Previously maven put test dependencies into dependency graph even when
|
||
|
"maven.test.skip" was true, therefore. This patch fixes that with few
|
||
|
caveats:
|
||
|
|
||
|
maven-compat was changed so plugins using old api work like this as
|
||
|
well. We removed test deps from "artifacts" Set in
|
||
|
DefaultArtifactResolver if maven.test.skip system property is found.
|
||
|
|
||
|
We created new DependencySelector. Currently it's in wrong place and
|
||
|
possibly has other problems (never going to get upstreamed like
|
||
|
this). But as a hack this works OK.
|
||
|
|
||
|
Main problem: Is using "maven.test.skip" string literally OK? Also,
|
||
|
literally referencing "test" scope is probably not 100% clean.
|
||
|
---
|
||
|
.../artifact/resolver/DefaultArtifactResolver.java | 17 +++++
|
||
|
.../main/java/org/apache/maven/DefaultMaven.java | 3 +-
|
||
|
.../maven/SkipTestScopeDependencySelector.java | 72 ++++++++++++++++++++
|
||
|
3 files changed, 91 insertions(+), 1 deletions(-)
|
||
|
create mode 100644 maven-core/src/main/java/org/apache/maven/SkipTestScopeDependencySelector.java
|
||
|
|
||
|
diff --git a/maven-compat/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java b/maven-compat/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
|
||
|
index 2e65979..601ace7 100644
|
||
|
--- a/maven-compat/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
|
||
|
+++ b/maven-compat/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
|
||
|
@@ -460,6 +460,23 @@ public class DefaultArtifactResolver
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
+ // When we find maven.test.skip property we remove dependencies
|
||
|
+ // with scope "test" from artifact set. Current implementation
|
||
|
+ // of artifacts doesn't implement "remove" method so create a
|
||
|
+ // new object and copy non-test artifacts there
|
||
|
+ if (System.getProperty("maven.test.skip") != null) {
|
||
|
+ Set<Artifact> newArtifacts = new LinkedHashSet<Artifact>();
|
||
|
+ for (Artifact artifact: artifacts)
|
||
|
+ {
|
||
|
+ String scope = artifact.getScope();
|
||
|
+ if (scope == null || !scope.equals("test"))
|
||
|
+ {
|
||
|
+ newArtifacts.add(artifact);
|
||
|
+ }
|
||
|
+ }
|
||
|
+ artifacts = newArtifacts;
|
||
|
+ }
|
||
|
+
|
||
|
// After the collection we will have the artifact object in the result but they will not be resolved yet.
|
||
|
result =
|
||
|
artifactCollector.collect( artifacts, rootArtifact, managedVersions, collectionRequest, source,
|
||
|
diff --git a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
|
||
|
index 8fdb6ed..75d1e37 100644
|
||
|
--- a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
|
||
|
+++ b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
|
||
|
@@ -31,6 +31,7 @@ import java.util.List;
|
||
|
import java.util.Map;
|
||
|
import java.util.Properties;
|
||
|
|
||
|
+import org.apache.maven.SkipTestScopeDependencySelector;
|
||
|
import org.apache.maven.artifact.ArtifactUtils;
|
||
|
import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
|
||
|
import org.apache.maven.eventspy.internal.EventSpyDispatcher;
|
||
|
@@ -437,7 +438,7 @@ public class DefaultMaven
|
||
|
|
||
|
DependencySelector depFilter =
|
||
|
new AndDependencySelector( new ScopeDependencySelector( "test", "provided" ), new OptionalDependencySelector(),
|
||
|
- new ExclusionDependencySelector() );
|
||
|
+ new ExclusionDependencySelector(), new SkipTestScopeDependencySelector() );
|
||
|
session.setDependencySelector( depFilter );
|
||
|
|
||
|
DependencyGraphTransformer transformer =
|
||
|
diff --git a/maven-core/src/main/java/org/apache/maven/SkipTestScopeDependencySelector.java b/maven-core/src/main/java/org/apache/maven/SkipTestScopeDependencySelector.java
|
||
|
new file mode 100644
|
||
|
index 0000000..60be724
|
||
|
--- /dev/null
|
||
|
+++ b/maven-core/src/main/java/org/apache/maven/SkipTestScopeDependencySelector.java
|
||
|
@@ -0,0 +1,72 @@
|
||
|
+package org.apache.maven;
|
||
|
+
|
||
|
+
|
||
|
+import java.util.Arrays;
|
||
|
+import java.util.Collection;
|
||
|
+import java.util.Collections;
|
||
|
+import java.util.HashSet;
|
||
|
+
|
||
|
+import org.sonatype.aether.collection.DependencyCollectionContext;
|
||
|
+import org.sonatype.aether.collection.DependencySelector;
|
||
|
+import org.sonatype.aether.graph.Dependency;
|
||
|
+import org.sonatype.aether.RepositorySystemSession;
|
||
|
+
|
||
|
+/**
|
||
|
+ * A dependency selector that filters dependencies with scope "test"
|
||
|
+ * when tests are being skipped.
|
||
|
+ *
|
||
|
+ * @author Stanislav Ochotnicky
|
||
|
+ */
|
||
|
+public class SkipTestScopeDependencySelector
|
||
|
+ implements DependencySelector
|
||
|
+{
|
||
|
+
|
||
|
+ private boolean testSkip;
|
||
|
+
|
||
|
+ /**
|
||
|
+ * Creates a new selector
|
||
|
+ */
|
||
|
+ public SkipTestScopeDependencySelector()
|
||
|
+ {
|
||
|
+ testSkip = System.getProperty("maven.test.skip") != null ? true : false;
|
||
|
+ }
|
||
|
+
|
||
|
+ public boolean selectDependency( Dependency dependency )
|
||
|
+ {
|
||
|
+ if (testSkip && dependency.getScope().equals("test"))
|
||
|
+ {
|
||
|
+ return false;
|
||
|
+ }
|
||
|
+ else
|
||
|
+ {
|
||
|
+ return true;
|
||
|
+ }
|
||
|
+ }
|
||
|
+
|
||
|
+ public DependencySelector deriveChildSelector( DependencyCollectionContext context )
|
||
|
+ {
|
||
|
+ return this;
|
||
|
+ }
|
||
|
+
|
||
|
+ @Override
|
||
|
+ public boolean equals( Object obj )
|
||
|
+ {
|
||
|
+ if ( this == obj )
|
||
|
+ {
|
||
|
+ return true;
|
||
|
+ }
|
||
|
+ else if ( null == obj || !getClass().equals( obj.getClass() ) )
|
||
|
+ {
|
||
|
+ return false;
|
||
|
+ }
|
||
|
+
|
||
|
+ return true;
|
||
|
+ }
|
||
|
+
|
||
|
+ @Override
|
||
|
+ public int hashCode()
|
||
|
+ {
|
||
|
+ return 42;
|
||
|
+ }
|
||
|
+
|
||
|
+}
|
||
|
--
|
||
|
1.7.6
|
||
|
|