Как заархивировать файлы с префиксной папкой в ​​SBT - PullRequest
4 голосов
/ 26 сентября 2010

Для создания дистрибутива ZIP с помощью Simple Build Tool достаточно просто сделать

def distPath = (
  ((outputPath ##) / defaultJarName) +++
  mainDependencies.scalaJars
)
lazy val dist = zipTask(distPath, "dist", "distribution.zip") dependsOn (`package`) describedAs("Zips up the project.")

Это добавляет файлы JAR в корень ZIP. Как добавить файлы JAR в подпапку lib в ZIP-архиве?

1 Ответ

4 голосов
/ 29 сентября 2010

Для сб. 0,7.x:

Насколько я знаю, по умолчанию ничего не реализовано. Тем не менее, вы можете использовать SBT FileUtilities.

Попробуйте поэкспериментировать со следующим примером, который копирует вашу банку с артефактом в папку tmp, архивирует папку и удаляет ее. Это должно быть легко распространить на зависимых библиотек.

class project(info: ProjectInfo) extends DefaultProject(info) {                                                                                                                                                

  def distPath = {                                                                                                                                                                                             
    ((outputPath ##) / defaultJarName) +++ mainDependencies.scalaJars                                                                                                                                          
  }                                                                                                                                                                                                            

  private def str2path(str: String): Path = str                                                                                                                                                                

  lazy val dist = task {                                                                                                                                                                                       
    FileUtilities.copyFile((outputPath ##) / defaultJarName, "tmp" / "lib" / defaultJarName, log)                                                                                                              
    FileUtilities.zip(List(str2path("tmp")), "dist.zip", true, log)                                                                                                                                            
    FileUtilities.clean("tmp", log)                                                                                                                                                                            
    None                                                                                                                                                                                                       
  }                                                                                                                                                                                                            

}                 

Следующие функции из FileUtilities использовались выше:

def zip(sources: Iterable[Path], outputZip: Path, recursive: Boolean, log: Logger)                                                                                                                                                                                                         
def copyFile(sourceFile: Path, targetFile: Path, log: Logger): Option[String]
def clean(file: Path, log: Logger): Option[String]

Их заявления должны быть самоочевидными.

...