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; } }