Конфликт версий зависимостей Maven (google.protobuf) - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть проект, который использует org.openstreetmap.osmosis и spark зависимости. Все они имеют зависимость com.google.protobuf intern, но требуют разных версий. Когда я строю свой проект, Maven выбирает одну из этих зависимостей, и дальнейшее выполнение приводит к ошибке во время выполнения. К сожалению, это не помогает явно объявить зависимость protobuf.

Я слышал, что было бы неплохо использовать maven shade plugin, но я не могу его правильно настроить. Может ли кто-нибудь помочь мне?

Эскиз использования плагина Shade:

<plugin>
    <groupId> org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>2.4.2</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <relocations>
                    <relocation>
                        <pattern>com.google.protobuf</pattern>
                        <shadedPattern>${project.groupId}.${project.artifactId}.shaded.protobuf</shadedPattern>
                    </relocation>
                </relocations>
            </configuration>
        </execution>
    </executions>
</plugin>

1 Ответ

0 голосов
/ 30 сентября 2019

Плагин Shade не может помочь здесь. Цитирую документацию:

Этот плагин предоставляет возможность упаковать артефакт в uber-jar, включая его зависимости, и затемнить - то есть переименовать - пакеты некоторых из зависимостей

* 1005. *

Это не то, что вам нужно. Вам нужно отделить classpath с одной версией protobuf от classpath с другой версией. Это сложная вещь, вам придется поиграться с загрузчиками классов или каким-то модульным механизмом, например OSGi.

Но я бы сначала попытался просто явно объявить самую новую версию этих двух версий protobuf и проверить, если этообратно совместим.

...