2014-10-09 3 views
0

Эти зависимости моего проекта:Как извлечь банку зависимости в конкретную папку во время компиляции?

libraryDependencies ++= Seq(
    javaJdbc, 
    javaEbean, 
    cache, 
    javaWs, 
    "com.company" % "common_2.11" % "2.3.3" 
) 

В com.company.common_2.11-2.3.3 имеется баночка файл common_2.11-2.3.3-adtnl.jar.

Как я могу во время процесса компиляции в build.sbt сообщить SBT, чтобы извлечь его содержимое в определенную папку в моем проекте?

ответ

1

Используйте следующие в build.sbt:

def unpackjar(jar: File, to: File): File = { 
    println(s"Processing $jar and saving to $to") 
    IO.unzip(jar, to) 
    jar 
} 

resourceGenerators in Compile += Def.task { 
    val jar = (update in Compile).value 
      .select(configurationFilter("compile")) 
      .filter(_.name.contains("common")) 
      .head 
    val to = (target in Compile).value/"unjar" 
    unpackjar(jar, to) 
    Seq.empty[File] 
}.taskValue 

Это предполагает, что "common" является уникальной частью среди всех ваших зависимостей. В противном случае вам нужно исправить filter.

Он также предполагает, что вы действительно не хотите файлы в compile, но немного позже, когда вызывается package. Вам необходимо будет переместить код между Def.task{...} в compile in Compile блок как:

compile in Compile <<= (compile in Compile).dependsOn(Def.task { 
    val jar = (update in Compile).value 
      .select(configurationFilter("compile")) 
      .filter(_.name.contains("common")) 
      .head 
    val to = (target in Compile).value/"unjar" 
    unpackjar(jar, to) 
    Seq.empty[File] 
}) 
Смежные вопросы