How to exclude a dependency for a specific scope only?
dependencies, maven
Solution
I apologize if my question wasn't as clear as it could have been. The way I resolved this wasn't hard at all:
- I added a separate dependency for C in my pom
- I kept the exclusion of C in A
Concretely here, I just added:
<dependency>
<groupId>org.apache.cassandra</groupId>
<artifactId>cassandra-all</artifactId>
<version>1.1.5</version>
</dependency>
and also the following dependency that was missing at runtime otherwise.
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
Problem
I have two dependencies in my pom called A and B. Both A and B have a transitive dependency on an artifact C (cassandra-all). A and B use difference versions of C. Dependency A is the artifact astyanax. I want to keep the Version of C that comes with B. I accomplished by adding an exclusion in A (Astyanax) for C. Unfortunately, I want the scope of B to be 'test'. This means that with the exclusion in A, C will not be included outside of the test scope. How can I resolve this? Can an exclusion be for a specific scope only? Alternatively, can I specify which version to use for a transitive dependency? Example: Here is what my pom looks like: Artifact A (astyanax) with exclusion of dependency on Artifact C (called cassandra-all) ``` <dependency> <groupId>com.netflix.astyanax</groupId> <artifactId>astyanax</artifactId> <version>1.0.4</version> <exclusions> <exclusion> <groupId>org.apache.cassandra</groupId> <artifactId>cassandra-all</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.cassandraunit</groupId> <artifactId>cassandra-unit</artifactId> <version>1.1.1.1</version> <scope>test</scope> </dependency> ``` So concretely: how can I include cassandra-all when I run code outside of the test scope and still keep the scope of cassandraunit test only?