выбор 2 версии JAR

Мои проекты зависят от двух зависимостей.

<dependency>
    <groupId>com.myorg.projectA</groupId>
    <artifactId>projectA</artifactId>
    <version>0.0.1-RELEASE</version>
</dependency>

<dependency>
    <groupId>com.myorg.projectB</groupId>
    <artifactId>projectB</artifactId>
    <version>0.0.1-RELEASE</version>
</dependency>

Обе эти зависимости зависят от разных версий morphia. Когда я создаю свой проект, выбирается только 1 версия morphia. Мне понадобятся обе версии morphia.

Вот что я добавил на основе этот решение, но это, похоже, не работает.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.0.0</version>
    <configuration>
        <descriptor>src/assembly/dep.xml</descriptor>
    </configuration>
    <executions>
        <execution>
        <id>copy-dependencies</id>
        <phase>package</phase>
        <goals>
            <goal>copy-dependencies</goal>
        </goals>
        <configuration>
            <artifactItems>
                <artifactItem>
                    <groupId>org.mongodb.morphia</groupId>
                    <artifactId>morphia</artifactId>
                    <classifier>server</classifier>
                    <version>1.3.2</version>
                    <type>jar</type>
                </artifactItem>
                <artifactItem>
                    <groupId>org.mongodb.morphia</groupId>
                    <artifactId>morphia</artifactId>
                    <classifier>server</classifier>
                    <version>0.110</version>
                    <type>jar</type>
                </artifactItem>
            </artifactItems>
  <outputDirectory>${project.build.directory}/dependency/</outputDirectory>
    </configuration>
</execution>

мой файл сборки dep.xml

<?xml version='1.0' encoding='UTF-8'?>
<assembly>
    <id>jar-with-dependencies</id>
<formats>
    <format>jar</format>
</formats>

<dependencySets>
    <dependencySet>
        <scope>runtime</scope>
        <unpack>true</unpack>
        <unpackOptions>
            <excludes>
                <exclude>**/LICENSE*</exclude>
                <exclude>**/README*</exclude>
            </excludes>
        </unpackOptions>
    </dependencySet>
</dependencySets>

<fileSets>
    <fileSet>
    <directory>${project.build.directory}/dependency</directory>
    <outputDirectory>/dependency</outputDirectory>
    <filtered>false</filtered>
    <includes>
        <include>*.jar</include>
    </includes>
    <fileMode>0600</fileMode>
    </fileSet>
</fileSets>

I don't see both the versions of morphia being downloaded or being copied into my dependency folder.


person user1324887    schedule 03.10.2017    source источник
comment
Сначала вы ошибаетесь в целях плагина maven-assembly, вызывая maven-assembly-plugin имеет только одну цель single у него нет цели copy-dependencies... кроме того, если вы хотите, чтобы обе версии morphia были в пути к классам? Это просто зависит от порядка в пути к классам, а это не то, что вам нужно. Вам нужно принять решение, какой из них будет использоваться ...   -  person khmarbaise    schedule 03.10.2017
comment
Какие версии Morphia вам нужны? Более новые версии обратно совместимы со старыми серверами, поэтому обычно вам нужна самая последняя версия Morphia для вашего проекта.   -  person Nic Cottrell    schedule 03.10.2017
comment
@NicCottrell Мы используем morphia-1.3.2 и morphia-0.110. Не уверен, что они совместимы. Даже если они есть, они также должны быть совместимы с драйвером Mongo. Обе библиотеки подключаются к разным монго с разными версиями драйверов.   -  person user1324887    schedule 04.10.2017
comment
Боже! 0.110 старше 2,5 лет. Я рекомендую вам отказаться от этого и остановиться на активной версии. Какую версию сервера MongoDB вы используете?   -  person Nic Cottrell    schedule 05.10.2017
comment
@NicCottrell Я не вижу, какую версию mongodb мы используем. Это более старая версия, но мы используем с ней mongo-java-driver-2.14.1, которая не будет совместима с morphia-1.3.2, если я не ошибаюсь.   -  person user1324887    schedule 06.10.2017


Ответы (1)


Maven часто находит разные версии артефактов из-за транзитивных зависимостей. В этом случае Maven подбирает только первый попавшийся артефакт.

Если вы действительно хотите получить две версии артефакта, вы можете использовать такие плагины, как maven-build-helper-plugin. Но, скорее всего, вы не получите то, что хотите. Чтобы использовать две разные версии jar во время выполнения, вам придется иметь дело с загрузчиками классов, и это может быть очень сложно заставить работать. Если вы действительно хотите пойти по этому пути, я предлагаю вам взглянуть на osgi и одну из его реализаций, например Felix< /а>.

person PaL    schedule 03.10.2017
comment
Я считаю, что ссылка, которой я поделился, была похожа на проблему, с которой я столкнулся. Я нашел другие сообщения, в которых использовалось maven-assembly-plugin. Я могу ошибаться, но из доступной информации казалось, что люди нашли решения, не играя с загрузчиком классов? - person user1324887; 03.10.2017