Управление несколькими версиями зависимостей с OSGI / Maven - PullRequest
1 голос
/ 24 марта 2012

У меня есть сборка Maven для проекта OSGI, над которым я работаю.Я хотел бы использовать некоторые функции из библиотеки guava-osgi от Google, версия 11.0.1.

Один из проектов, от которых я зависел, зависит от guava-osgi, версия 10.0.0.Я знаю, что возможно наличие нескольких версий для конкретной зависимости, но у меня возникли небольшие проблемы с этим.

Указание зависимости на 11.0.1 в pom моего проекта компилируется просто отлично, но когда я запускаю своймодульные тесты, вытягивание Java в версии 10.0.0, что приводит к ошибке времени выполнения.В частности, один из классов в 11.0.1 имеет то же имя, что и интерфейс в 10.0.0, так что Java barfs, когда я пытаюсь его создать.

Есть ли способ сделать это элегантно?

Ответы [ 3 ]

4 голосов
/ 24 марта 2012
  1. Проверить дерево зависимостей с помощью maven-dependency-plugin : mvn dependency:tree
  2. Найти все зависимости, которые активны в области тестирования с guava-osgi:10.0.0 версия
  3. Исключить 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>
...
0 голосов
/ 25 марта 2012

Поскольку вы работаете в среде на основе OSGi, вы можете легко указать необходимую версию guava, используя плагин пакета.Но важно понимать, что во время компиляции и во время модульного тестирования (то есть в Maven) он не знает / не заботится о среде OSGi, которую вы создали.Таким образом, вы должны использовать некоторые хитрости, как указано в других ответах.Хотя я не проверял их.

0 голосов
/ 24 марта 2012

Вы можете попытаться исключить версию 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>
...
...