Maven依赖版本冲突(google.protobuf)

时间:2019-09-29 21:14:01

标签: maven maven-shade-plugin

我有一个使用org.openstreetmap.osmosisspark依赖项的项目。它们都有一个com.google.protobuf实习生依赖项,但是需要不同的版本。当我构建项目时,Maven选择这些子依赖项之一,进一步执行会导致运行时错误。不幸的是,明确声明protobuf的依赖性也无济于事。

我听说使用maven shade plugin是个好主意,但我不能很好地进行配置。有人可以帮我吗?

使用阴影插件的草图:

<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 :(得分:0)

Shade插件在这里无济于事。引用文档:

  

此插件提供了将工件(包括其依赖项)打包到uber-jar中的功能,并且可以阴影化(即重命名)某些依赖项的包

这不是您所需要的。您需要将一个版本的protobuf的类路径与另一个版本的类路径分开。这是一件复杂的事情,您必须使用类加载器或OSGi之类的模块化实现机制。

但是我会先尝试明确声明这两个protobuf版本的最新版本,并检查它是否向后兼容。

相关问题