Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: user1324887Ответов: 1

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

<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.

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

mavenmorphiamaven-assembly-plugin

Ответы

Ответ 1 · PaL

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы