2016-03-29 20 views
1

我试图在使用Maven Shade插件构建超级jar时排除一系列工件。下面是我使用这个配置:使用Maven Shade插件排除工件未按预期方式工作

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-shade-plugin</artifactId> 
      <version>2.4.3</version> 
      <configuration> 
       <createDependencyReducedPom>true</createDependencyReducedPom> 
       <artifactSet> 
        <excludes> 
         <exclude>com.fasterxml.jackson.core:jackson-core:jar:2.4.5</exclude> 
        </excludes> 
       </artifactSet> 
... 

剔除包没有版本信息的作品:

    <exclude>com.fasterxml.jackson.core:jackson-core</exclude> 

但不幸的是,由于有不同的版本,做的神器是不是一种选择需要包括在内。

回答

0

我想你只需要定义你正在使用的杰克逊版本。

显然这是不好的做法,当你有不同的版本(可能是传递)相同的依赖关系。在这种情况下,您无法知道该库的哪个版本最终会出现在您的项目中。你可以用xml替换依赖顺序,然后最终的结果会不同。听起来不太好,是吗?

所以,你需要什么指定 - 在你的dependencyManagement部分杰克逊的准确版本:

<dependencyManagement> 
    <dependencies> 
    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-core</artifactId> 
     <version>${jackson.version}</version> 
    </dependency> 
... 

这将确保你在你的神器只有特定版本,你就不会需要排除特定版本。

希望这有助于

+0

感谢伊戈尔,具体使用依赖管理确实是这里的解决方案。尽管Maven Shade插件中仍然存在一些错误(或者文档缺乏清晰度),但我想因为有一个解决方法,它不是世界的尽头。 –