2016-03-29 21 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插件中仍然存在一些錯誤(或者文檔缺乏清晰度),但我想因爲有一個解決方法,它不是世界的盡頭。 –