我的pom中有两个依赖项,名为A和B。A和B都依赖于工件C(Cassandra)。A和B使用C的不同版本。依赖性A是工件astyanax。
我想保留B附带的C的版本,我在A (Astyanax)中为C添加了一个排除。
不幸的是,我希望B的范围是‘测试’。这意味着在A中排除,C将不包括在测试范围之外。
我怎么解决这个问题?排除是否只适用于某一特定范围?或者,我是否可以指定用于传递依赖项的版本?
示例:
下面是我的pom的样子:
人工制品A (astyanax),不依赖于人工制品C(称为cassandra)
<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?
发布于 2013-01-29 22:11:18
如果我的问题不够清楚,我很抱歉。我解决这个问题的方式一点也不难:
具体而言,我刚才补充说:
<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>发布于 2012-11-27 09:29:48
我不确定我理解了所有的东西,但无论如何,你应该能够通过配置文件来实现这一点。
在pom中,创建一个配置文件A,其中添加依赖项A并排除B,以及配置文件B,在该配置文件中,您将有一个依赖项而不包含A。
在运行时,取决于您所选择的配置文件中的哪一个,您将包含其中一个或另一个。
HIH
发布于 2015-12-07 18:59:02
因此,具体而言:当我在测试范围之外运行代码,并且仍然只保留cassandraunit测试的范围时,我如何包括cassandra?
使用Maven POM配置surefire-maven-plugin和改变你的类路径.
如果您只希望在运行测试时将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>https://stackoverflow.com/questions/13572502
复制相似问题