使用OSGI / Maven管理多个依赖版本

时间:2012-03-23 21:32:05

标签: java maven osgi dependency-management

我正在为我正在开发的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。

有没有办法优雅地做到这一点?

3 个答案:

答案 0 :(得分:4)

  1. 使用maven-dependency-plugin检查依赖关系树:mvn dependency:tree
  2. 使用guava-osgi:10.0.0版本
  3. 查找在测试范围内处于活动状态的所有依赖项
  4. 从测试范围中排除guava-osgi:10.0.0
  5. ...
    <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环境。所以,你必须使用其他答案中提到的一些技巧。我没有测试过那些。