Projects
home:vanmeeuwen:lesb
maven
0004-Fix-text-scope-skipping-with-maven.test.sk...
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0004-Fix-text-scope-skipping-with-maven.test.skip.patch of Package maven
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
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.