我正在为我正在开发的OSGI项目制作一个Maven构建版本。我想使用Google的guava-osgi库11.0.1版本中的一些功能。
我依赖的项目之一依赖于guava-osgi,版本10.0.0。我知道为特定依赖项设置多个版本是可行的,但我遇到了一些麻烦。
在我的项目的pom中指定对11.0.1的依赖性编译就好了,但是当我运行我的单元测试时,Java会引入版本10.0.0,这会导致运行时错误。具体来说,11.0.1中的一个类与10.0.0中的接口具有相同的名称,因此当我尝试实例化它时,Java barfs。
有没有办法优雅地做到这一点?
答案 0 :(得分:4)
mvn dependency:tree
guava-osgi:10.0.0
版本guava-osgi:10.0.0
...
<dependency>
<groupId>dep1-groupid</groupId>
<artifactId>dep1-artifactid</artifactId>
<version>dep1-version</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>com.googlecode.guava-osgi</groupId>
<artifactId>guava-osgi</artifactId>
</exclusion>
</exclusions>
</dependency>
...
答案 1 :(得分:0)
您可以尝试从“我依赖的项目”
中排除10.0.0版本...
<dependency>
<groupId>project i depend on</groupId>
<artifactId>project</artifactId>
<version>2.0.0</version>
<exclusions>
<exclusion>
<groupId>com.googlecode.guava-osgi</groupId>
<artifactId>guava-osgi</artifactId>
</exclusion>
</exclusions>
</dependency>
...
答案 2 :(得分:0)
由于您正在使用基于OSGi的环境,因此您可以使用bundle插件轻松指定所需的guava版本。但是,重要的是要理解在编译时和单元测试时(即在Maven中),它不知道/关心您创建的OSGi环境。所以,你必须使用其他答案中提到的一些技巧。我没有测试过那些。