Maven中同一个依赖项的不同版本

13

我有一个依赖于 Woodstox 和 XStream 的 Maven 项目。不幸的是,XStream 也依赖于 Woodstox,但是它所需要的版本比我需要的版本要稍微旧一些。与此同时,Woodstox 库的 artifact 名称已经更改,因此Maven不会将它们视为同一artifact的多个版本。但是包和类名相同,这意味着运行时存在冲突。

现在,我可以显然地从构建中删除旧的 Woodstox jar (在我们的情况下是war文件),但是解决这种问题的正确方法是什么?

2个回答

18
你可以尝试在 xstream 的依赖声明中 排除 woodstox 依赖。
  <dependency>
        <groupId>xstream.group</groupId>
        <artifactId>xstream</artifactId>
        <version>a.b.c</version>
        <exclusions>
            <exclusion>
                <groupId>woodstox.group</groupId>
                <artifactId>woodstox</artifactId>
            </exclusion>
        </exclusions>
  </dependency>

6
+1,但不幸的是,这要求新版本具有与旧版本相同的类和包名称,并且在其他方面向后兼容。 - Sean Patrick Floyd

5
如果你很幸运,Raghuram建议的解决方案会起作用。
否则,你需要创建一个修改过的XStream jar版本,可能需要使用 Maven Shade Plugin,将两个XStream woodstox合并成一个Jar,并 重命名所有woodstox包

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接