Maven 如何仅排除特定范围的依赖项?

Maven 如何仅排除特定范围的依赖项?,maven,dependencies,Maven,Dependencies,我的pom中有两个依赖项,称为A和B。A和B都对工件C(cassandra all)具有可传递依赖项。A和B使用C的不同版本。依赖项A是astyanax的工件。 我想保留与B一起提供的C的版本。我通过在A(Astyanax)中为C添加一个排除项来完成 不幸的是,我希望B的范围是“test”。这意味着在A中排除的情况下,C将不包括在测试范围之外 我如何解决这个问题?排除只能针对特定范围吗?或者,我可以指定用于可传递依赖项的版本吗 示例: 以下是我的pom的外观: 工件A(astyanax),不

我的pom中有两个依赖项,称为A和B。A和B都对工件C(cassandra all)具有可传递依赖项。A和B使用C的不同版本。依赖项A是astyanax的工件。

我想保留与B一起提供的C的版本。我通过在A(Astyanax)中为C添加一个排除项来完成

不幸的是,我希望B的范围是“test”。这意味着在A中排除的情况下,C将不包括在测试范围之外

我如何解决这个问题?排除只能针对特定范围吗?或者,我可以指定用于可传递依赖项的版本吗


示例:
以下是我的pom的外观:

工件A(astyanax),不依赖工件C(称为cassandra all)


com.netflix.astyanax
阿斯蒂亚纳克斯
1.0.4
org.apache.cassandra
卡桑德拉
org.cassandraunit
卡桑德拉单位
1.1.1.1
测试

具体地说:当我在测试范围之外运行代码时,如何才能包含cassandra all,并且仍然只保留cassandraunit测试的范围?

我不确定我是否了解所有内容,但无论如何,您应该能够通过配置文件实现这一点

在pom中,创建一个配置文件a,其中添加了排除B的依赖项a,以及一个排除a的依赖项B

在运行时,根据您选择的配置文件,您将包含其中一个


如果我的问题没有那么清楚,我道歉。我解决这个问题的方法一点也不难:

  • 我在pom中为C添加了一个单独的依赖项
  • 我把C排除在A之外
具体地说,我刚才补充说:

    <dependency>
        <groupId>org.apache.cassandra</groupId>
        <artifactId>cassandra-all</artifactId>
        <version>1.1.5</version>
    </dependency>

org.apache.cassandra
卡桑德拉
1.1.5
还有以下在运行时丢失的依赖项

    <dependency>
        <groupId>commons-lang</groupId>
        <artifactId>commons-lang</artifactId>
        <version>2.6</version>
    </dependency>

公地郎
公地郎
2.6
具体地说:当我在测试范围之外运行代码时,如何才能包含cassandra all,并且仍然只保留cassandraunit测试的范围

如果您只希望在运行测试时从类路径中删除
cassandra all
依赖项,那么下面的POM代码片段将使问题变得棘手:


org.apache.maven.plugins
maven surefire插件
org.apache.cassandra:cassandra all