我做了很多编码已经有一段时间了,所以请耐心等待一些基本问题!
我正在尝试为Atlassian Confluence编写一个插件,该插件与另一个第三方平台集成。此第三方平台提供了一个SDK库,可与其REST API一起使用。使用它是一件很方便的事情,因为我真的只是想快速构建一个概念。我正在使用Java 1.8,IntelliJ和Maven以及Confluence 5.8。
这是我的第一个问题 - 我希望作为依赖项包含的第三方SDK库具有它自己的依赖性。其中,这是一个例子:
<!-- HTTP client: jersey-client -->
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>${jersey-version}</version>
</dependency>
<dependency>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-multipart</artifactId>
<version>${jersey-version}</version>
</dependency>
<!-- JSON processing: jackson -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson-version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson-version}</version>
</dependency>
它继续,但你明白了。我的第一个问题是我无法成功添加第三方SDK库并且无需将所有SDK的依赖项添加到我自己的项目中即可编译项目。 这是预期的吗?它大大膨胀了我的罐子大小。
这导致了下一个问题。 Confluence已经使用了较旧的 - 和Atlassian - 定制的版本的Jersey库(1.8-atlassian-16),我怀疑它与SDK库使用的较新的Jersey库(1.19.1)发生冲突。如果我在项目中指定Atlassian Jersey版本,它会编译并安装但在我尝试运行它时会失败。如果我指定SDK库使用的Jersey版本,它会编译但不能正确安装。 我可以对泽西岛图书馆版本的差异做些什么,以便我可以在我的项目中使用SDK库吗?
如果需要,我会提供错误详细信息,但我很确定它与Jersey版本冲突有关,因为两种情况下的错误都是“NoSuchMethod”和Jersey类的类强制转换异常。
答案 0 :(得分:1)
使用不同版本库的2个不同SDK的情况有点难以解决。例如,在您的情况下,您将不得不找到可以解决这两者的Jersey依赖项的传递版本。你必须找出你所包含的外部SDK(使用树)的依赖关系,并选择排除它引用的特定版本(使用排除),捆绑一个可以解决依赖关系并运行maven的传递版本目标。您也可以从这些线程enter link description here和enter link description here中获得一个好主意。希望它有所帮助