我有一个使用org.openstreetmap.osmosis
和spark
依赖项的项目。它们都有一个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>
答案 0 :(得分:0)
Shade插件在这里无济于事。引用文档:
此插件提供了将工件(包括其依赖项)打包到uber-jar中的功能,并且可以阴影化(即重命名)某些依赖项的包
这不是您所需要的。您需要将一个版本的protobuf的类路径与另一个版本的类路径分开。这是一件复杂的事情,您必须使用类加载器或OSGi之类的模块化实现机制。
但是我会先尝试明确声明这两个protobuf版本的最新版本,并检查它是否向后兼容。