diff --git a/0001-Add-plugin-api-deps.patch b/0001-Add-plugin-api-deps.patch index 69ebec4..c7e0755 100644 --- a/0001-Add-plugin-api-deps.patch +++ b/0001-Add-plugin-api-deps.patch @@ -1,14 +1,14 @@ -From 8ded699d85fd30717fbdd09a9238f309386747db Mon Sep 17 00:00:00 2001 +From 97ddab6cd1a948294176f851e37a48b5bc036c73 Mon Sep 17 00:00:00 2001 From: Stanislav Ochotnicky -Date: Tue, 12 Oct 2010 16:56:50 +0200 -Subject: [PATCH 1/2] Add plugin-api deps +Date: Tue, 30 Aug 2011 11:41:39 +0200 +Subject: [PATCH 1/4] Add plugin-api deps --- maven-plugin-api/pom.xml | 5 +++++ 1 files changed, 5 insertions(+), 0 deletions(-) diff --git a/maven-plugin-api/pom.xml b/maven-plugin-api/pom.xml -index 621f8d6..ca98242 100644 +index 8967754..0f72aa5 100644 --- a/maven-plugin-api/pom.xml +++ b/maven-plugin-api/pom.xml @@ -51,6 +51,11 @@ under the License. @@ -24,5 +24,5 @@ index 621f8d6..ca98242 100644 -- -1.7.4 +1.7.6 diff --git a/0002-Use-custom-resolver.patch b/0002-Use-custom-resolver.patch index a846e6a..9ecefbf 100644 --- a/0002-Use-custom-resolver.patch +++ b/0002-Use-custom-resolver.patch @@ -1,7 +1,7 @@ -From 2f1e46675a26996103ba9c96ae62d3b5876bdba8 Mon Sep 17 00:00:00 2001 +From e1b80440159b03b397cba740a7949f8be412fef5 Mon Sep 17 00:00:00 2001 From: Stanislav Ochotnicky -Date: Tue, 18 Jan 2011 11:09:32 +0100 -Subject: [PATCH 2/2] Use custom resolver +Date: Tue, 30 Aug 2011 11:42:32 +0200 +Subject: [PATCH 2/4] Use custom resolver WorkspaceReader is used to resolve main dependencies, but we had to add this resolve to ProjectModelResolver and DefaultModelResolver as @@ -220,5 +220,5 @@ index c97095f..ef0edc2 100644 } -- -1.7.4 +1.7.6 diff --git a/0003-Use-utf-8-source-encoding.patch b/0003-Use-utf-8-source-encoding.patch index 3ab9256..0cf3040 100644 --- a/0003-Use-utf-8-source-encoding.patch +++ b/0003-Use-utf-8-source-encoding.patch @@ -1,7 +1,7 @@ -From b84e27c430a321185639096e7a0ca2ab4945bbfa Mon Sep 17 00:00:00 2001 +From 053974e55c21a372e544ba23f5eca6c864cc283c Mon Sep 17 00:00:00 2001 From: Stanislav Ochotnicky -Date: Mon, 22 Aug 2011 16:11:57 +0200 -Subject: [PATCH] Use utf-8 source encoding +Date: Tue, 30 Aug 2011 11:43:01 +0200 +Subject: [PATCH 3/4] Use utf-8 source encoding --- pom.xml | 1 + diff --git a/0004-Fix-text-scope-skipping-with-maven.test.skip.patch b/0004-Fix-text-scope-skipping-with-maven.test.skip.patch new file mode 100644 index 0000000..28da01c --- /dev/null +++ b/0004-Fix-text-scope-skipping-with-maven.test.skip.patch @@ -0,0 +1,156 @@ +From d3c8d75d197ac8494c87f26ea63733d4f5163c7f Mon Sep 17 00:00:00 2001 +From: Stanislav Ochotnicky +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 newArtifacts = new LinkedHashSet(); ++ 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 + diff --git a/SkipTestScopeDependencySelector.java b/SkipTestScopeDependencySelector.java new file mode 100644 index 0000000..7b86781 --- /dev/null +++ b/SkipTestScopeDependencySelector.java @@ -0,0 +1,93 @@ +package org.sonatype.aether.util.graph.selector; + +/******************************************************************************* + * Copyright (c) 2010-2011 Sonatype, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Apache License v2.0 which accompanies this distribution. + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v10.html + * The Apache License v2.0 is available at + * http://www.apache.org/licenses/LICENSE-2.0.html + * You may elect to redistribute this code under either of these licenses. + *******************************************************************************/ + +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; + +/** + * A dependency selector that filters transitive dependencies based on their scope. Direct dependencies are always + * included regardless of their scope. Note: This filter does not assume any relationships between the scopes. + * In particular, the filter is not aware of scopes that logically include other scopes. + * + * @author Benjamin Bentmann + * @see Dependency#getScope() + */ +public class SkipTestScopeDependencySelector + implements DependencySelector +{ + + + /** + * Creates a new selector using the specified includes and excludes. + * + * @param included The set of scopes to include, may be {@code null} or empty to include any scope. + * @param excluded The set of scopes to exclude, may be {@code null} or empty to exclude no scope. + */ + public SkipTestScopeDependencySelector() + { + } + + + public boolean selectDependency( Dependency dependency ) + { + String scope = dependency.getScope(); + if (System.getProperty("maven.test.skip") != null && + scope == "test") + return false; + else return true; + } + + public DependencySelector deriveChildSelector( DependencyCollectionContext context ) + { + if ( this.transitive || context.getDependency() == null ) + { + return this; + } + + return new SkipTestScopeDependencySelector( true, included, excluded ); + } + + @Override + public boolean equals( Object obj ) + { + if ( this == obj ) + { + return true; + } + else if ( null == obj || !getClass().equals( obj.getClass() ) ) + { + return false; + } + + SkipTestScopeDependencySelector that = (SkipTestScopeDependencySelector) obj; + return transitive == that.transitive && included.equals( that.included ) && excluded.equals( that.excluded ); + } + + @Override + public int hashCode() + { + int hash = 17; + hash = hash * 31 + ( transitive ? 1 : 0 ); + hash = hash * 31 + included.hashCode(); + hash = hash * 31 + excluded.hashCode(); + return hash; + } + +} diff --git a/maven.spec b/maven.spec index 35288d3..c156278 100644 --- a/maven.spec +++ b/maven.spec @@ -2,7 +2,7 @@ Name: maven Version: 3.0.3 -Release: 13%{?dist} +Release: 14%{?dist} Summary: Java project management and project comprehension tool Group: Development/Tools @@ -36,6 +36,7 @@ Patch150: 0001-Add-plugin-api-deps.patch Patch151: 0003-Use-utf-8-source-encoding.patch # Patch2XX for non-upstreamable patches Patch200: 0002-Use-custom-resolver.patch +Patch201: 0004-Fix-text-scope-skipping-with-maven.test.skip.patch BuildRequires: maven BuildRequires: maven-parent @@ -114,6 +115,7 @@ Requires: jpackage-utils %patch150 -p1 %patch151 -p1 %patch200 -p1 +%patch201 -p1 # get custom resolver in place mkdir -p maven-aether-provider/src/main/java/org/apache/maven/artifact/resolver \ @@ -332,6 +334,9 @@ install -Dm 644 %{SOURCE1} %{buildroot}%{_sysconfdir}/bash_completion.d/%{name} %changelog +* Tue Aug 30 2011 Stanislav Ochotnicky - 3.0.3-14 +- Fix test scope skipping + * Mon Aug 22 2011 Stanislav Ochotnicky - 3.0.3-13 - Remove unnecessary deps causing problems from lib/ - Add utf-8 source encoding patch