2016-01-15 3 views
1

Я хотел бы скомпилировать проект с помощью Scala 2.10 и 2.11 с использованием функции перекрестной компиляции sbt. Проблема в том, что этот проект содержит некоторые зависимости Flink. Но флинг-банки не соответствуют стандартному двоичному формату (постфиксное имя с _2.10 или _2.11): в банках scala 2.10 нет постфикса, а у 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

Смежные вопросы