我的pom中有两个依赖项,称为A和B.A和B都具有对工件C(cassandra-all)的传递依赖性。 A和B使用C的差异版本。依赖关系A是工件 astyanax 。
我希望保留B附带的C的版本。我通过在A(Astyanax)中为C添加排除来完成。
不幸的是,我希望B的范围是'测试'。这意味着在A中排除,C不会包含在测试范围之外。
我该如何解决这个问题?排除只能针对特定范围吗?或者,我可以指定用于传递依赖的版本吗?
<小时/> 示例:
神器A(astyanax),不包括对神器C的依赖(称为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>
具体来说:当我在测试范围之外运行代码并且仍然只保留cassandraunit测试的范围时,如何包含cassandra-all?
答案 0 :(得分:4)
如果我的问题不尽如人意,我道歉。我解决这个问题的方式并不难:
具体来说,我刚刚补充说:
<dependency>
<groupId>org.apache.cassandra</groupId>
<artifactId>cassandra-all</artifactId>
<version>1.1.5</version>
</dependency>
以及运行时缺少的以下依赖项。
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
答案 1 :(得分:1)
具体来说:当我在测试范围之外运行代码并且仍然只保留cassandraunit测试的范围时,如何包含cassandra-all?
Use Maven POM to configure surefire-maven-plugin和change your classpath。
如果您想要的只是在运行测试时从类路径中删除cassandra-all
依赖项,那么以下POM代码段将变得棘手:
<build>
<!-- ... -->
<plugins>
<!-- ... -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<classpathDependencyExcludes>
<classpathDependencyExcludes>
org.apache.cassandra:cassandra-all
</classpathDependencyExcludes>
</classpathDependencyExcludes>
</configuration>
</plugin>
</plugins>
</build>
答案 2 :(得分:0)
我不确定我是否了解所有内容,但无论如何,您应该能够通过个人资料实现此目标。
在您的pom中,创建一个配置文件A,在其中添加您的依赖关系A,但不包括B和配置文件B,在该配置文件中,您将具有排除A的依赖关系。
在运行时,根据您选择的配置文件,您将包含其中一个。
HIH