首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >管理包依赖项

管理包依赖项
EN

Stack Overflow用户
提问于 2016-08-16 03:15:23
回答 2查看 93关注 0票数 0

我已经有一段时间没有做过大量的编码了,所以请原谅我的一些基本问题!

我正试图为亚特兰西安合流编写一个插件,它与另一个第三方平台集成在一起。这个第三方平台提供了一个可以与REST一起使用的SDK库。这是一件很方便的事情,因为我真的只是试图快速原型一个概念。我使用的是Java1.8、IntelliJ、Maven和Confluence5.8。

这里是我的第一个问题-第三方SDK库,我想把它作为一个依赖项包含在它自己的依赖项中。除其他外,这就是一个例子:

代码语言:javascript
复制
 <!-- 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已经使用了一个更老的和亚特兰西岛定制版本的泽西库(1.8亚特兰-16),我怀疑它与SDK库使用的较新的泽西库(1.19.1)发生了冲突。如果我在我的项目中指定亚特兰西安泽西版本,它会编译和安装,但当我试图运行它时,它会失败。如果我指定SDK库使用的泽西版本,它会编译但没有正确安装。,我能做些什么来解决泽西库版本的差异,以便我可以在我的项目中使用SDK库吗?

如果请求,我将提供错误详细信息,但我很确定这与泽西版本的冲突有关,因为这两种情况下的错误都是针对泽西类的"NoSuchMethod“和类强制转换异常。

EN

回答 2

Stack Overflow用户

发布于 2016-08-16 03:36:47

两个不同的SDK使用不同版本的库的情况有点棘手。例如,在这里,在您的例子中,您必须找到可以解决这两个问题的泽西依赖关系的传递版本。您必须找出您所包含的外部SDK的依赖项(使用树),并选择排除它所引用的特定版本(使用排除),打包一个可以解决依赖关系和运行maven目标的传递版本。您也将从这些线程中获得一个好主意,在这里输入链接描述在这里输入链接描述。希望它能帮上忙

票数 1
EN

Stack Overflow用户

发布于 2016-08-16 03:38:25

您可以使用一些工具重新打包第三方SDK及其依赖项,重命名包名以避免与confluence自己的jar文件发生冲突。

例如,扎贾尔

或者更好,使用maven遮阳插件

代码语言:javascript
复制
<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-shade-plugin</artifactId>
      <version>2.4.3</version>
      <executions>
        <execution>
          <phase>package</phase>
          <goals>
            <goal>shade</goal>
          </goals>
          <configuration>
            <relocations>
              <relocation>
                <pattern>org.codehaus.plexus.util</pattern>
                <shadedPattern>org.shaded.plexus.util</shadedPattern>
                <excludes>
                  <exclude>org.codehaus.plexus.util.xml.Xpp3Dom</exclude>
                  <exclude>org.codehaus.plexus.util.xml.pull.*</exclude>
                </excludes>
              </relocation>
            </relocations>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

这指示插件将类从包org.codehaus.plexus.util及其子包移动到包org.shaded.plexus.util中,方法是移动相应的JAR文件条目并重写受影响的字节码。类Xpp3Dom和其他类将保留在原来的包中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38966100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档