2016-01-15 33 views
1

我想使用sbt交叉編譯功能編譯Scala 2.10和2.11的項目。問題是這個項目包含一些Flink依賴項。但Flink jar不遵循標準的二進制格式(後綴_2.10_2.11):scala 2.10 jar沒有後綴,並且2.11擁有它。如何聲明Flink sbt跨版本依賴關係?

我找到了一個工作解決方案。但我對此並不滿意,我的問題是:有沒有更簡單和/或更優雅的方法來解決這個問題?

我目前的解決方案:

def flinkDependencies(scalaVersion: String) = { 
    if (scalaVersion.startsWith("2.10")) 
     Seq(
     "org.apache.flink" % "flink-scala" % flinkVersion % "optional", 
     "org.apache.flink" % "flink-streaming-scala" % flinkVersion % "optional" 
     ) 
    else 
     Seq(
      "org.apache.flink" %% "flink-scala" % flinkVersion % "optional", 
      "org.apache.flink" %% "flink-streaming-scala" % flinkVersion % "optional" 
    ) 
} 

libraryDependencies <++= scalaVersion(flinkDependencies) 
+0

目前Flink默認使用Scala 2.10構建,並且不會正確公開版本號。它計劃在下一個版本中解決這個問題。 –

+0

@ matthias-j-sax這是個好消息!謝謝。這將使Flink在不久的將來會過時這個問題。但是對於當前的問題有一個很好的解決方案仍然很有趣。 – gesundkrank

回答

2

是的,這是你如何將不得不這樣做。稍微縮短的版本是這樣的:

libraryDependencies ++= { 
    val suffix = if (scalaVersion.value.startsWith("2.11")) "_2.11" else "" 
    Seq(
    "org.apache.flink" % s"flink-scala$suffix"   % flinkV % "optional", 
    "org.apache.flink" % s"flink-streaming-scala$suffix" % flinkV % "optional" 
) 
} 
+0

這幫了我。這是一個很大的改進,沒有聲明兩次依賴關係。謝謝! – gesundkrank