2017-04-25 44 views
0

因此,對於一種依賴關係,我已經進入了一種我無法逃避的糾纏程度。我不願意想,當我在評論罐子把會發生什麼:需要路徑列表模式才能使sbt高興

libraryDependencies ++= Seq(
// "org.apache.avro" % "avro" % "1.8.1" excludeAll ExclusionRule(organization = "log4j"), 
// "org.apache.kafka" %% "kafka" % "0.10.0.0", 
    "org.apache.hive" % "hive-jdbc" % "1.2.2" 
    excludeAll ExclusionRule(organization = "log4j") 
    exclude("org.apache.hadoop", "hadoop-yarn-api"), 
    "log4j" % "log4j" % "1.2.16" 
) 

使用SBT組裝,我得到了以下重複數據刪除的問題:

[error] (*:assembly) deduplicate: different file contents found in the following: 
[error] C:\Users\G517329\.ivy2\cache\org.datanucleus\datanucleus-api-jdo\jars\datanucleus-api-jdo-3.2.6.jar:plugin.xml 
[error] C:\Users\G517329\.ivy2\cache\org.datanucleus\datanucleus-core\jars\datanucleus-core-3.2.10.jar:plugin.xml 
[error] C:\Users\G517329\.ivy2\cache\org.datanucleus\datanucleus-rdbms\jars\datanucleus-rdbms-3.2.9.jar:plugin.xml 

如果我堅持試圖找到一個合併策略,允許這三個罐子高興地共存於一個脂肪罐中。我試過下面戰略的若干變化,但我沒有取得什麼進展:

assemblyMergeStrategy in assembly := { 
    case PathList("javax", "transaction", xs @ _*) => MergeStrategy.first 
    case PathList(xs @ _*) if xs.last endsWith "plugin.xml" => MergeStrategy.discard 
    // case PathList("org", "datanucleus", "datanucleus-api-jdo", xs @ _*) => MergeStrategy.last 
    // case PathList("org", "datanucleus", "datanucleus-rdbms", xs @ _*) => MergeStrategy.last 
    case PathList("META-INF", xs @ _*) => MergeStrategy.discard 
    case x => 
    val oldStrategy = (assemblyMergeStrategy in assembly).value 
    oldStrategy(x) 
} 

我必須是如何工作的一些誤會,因爲在我看來,第二行應該找到每一個plugin.xml文件中的每個罐子並將其核武。

有沒有人成功地將hive-jdbc包含在一個胖罐子裏?

UPDATE:

case "plugin.xml" => MergeStrategy.discard //or .last應該工作,我會想,但拋出:

[error] (*:assembly) java.util.NoSuchElementException

回答

1

所以我今天早上加載了該項目,並給它一個嘗試。這一次

case "plugin.xml" => MergeStrategy.last

不扔,我有一個胖罐子。

呃。

UPDATE:

我不知道問題出在哪裏(的IntelliJ,SBT控制檯,SBT組裝),但有一些緩存的事情,使得它真的很難排除合併的問題。我發現確保修改build.sbt中的代碼的唯一可靠方法實際上是應用程序關閉整個IDE並重新打開它。