Создание автономной банки с Простым Инструментом Сборки

Существует ли способ сказать системе онлайн бронирования упаковывать все необходимые библиотеки (scala-library.jar) в основной пакет, таким образом, это автономно? (статичный?)

23
задан Łukasz Lew 22 May 2010 в 13:11
поделиться

2 ответа

Изменить 2011:
С тех пор ретроним (который опубликовал ответ на этой странице в 2010 году ) сделал этот sbt-плагин «sbt-onejar» , теперь в его новый адрес на GitHub , с обновленной документацией для SBT 0.12.

Упакует ваш проект с помощью One-JAR ™

onejar-sbt - это плагин простого инструмента сборки для создания единого исполняемого файла JAR, содержащего весь ваш код и зависимости в виде вложенных файлов JAR.
В настоящее время используется One-JAR версии 0.9.7. Он включен в плагин и не требует отдельной загрузки.


Исходный ответ:

Непосредственно это невозможно без расширения sbt ( настраиваемого действия после модели «пакетного» действия sbt ).

GitHub упоминает задачу сборки , специально разработанную для развертывания на пристани. Однако вы можете адаптировать его под свои нужды.

Код довольно общий (из этого сообщения и пользователя Rio):

 project / build / AssemblyProject.scala

 import sbt._

 trait AssemblyProject extends BasicScalaProject
 {
         def assemblyExclude(base: PathFinder) = base / "META-INF" ** "*"
         def assemblyOutputPath = outputPath / assemblyJarName
         def assemblyJarName = artifactID + "-assembly-" + version + ".jar"
         def assemblyTemporaryPath = outputPath / "assembly-libs"
         def assemblyClasspath = runClasspath
         def assemblyExtraJars = mainDependencies.scalaJars

         def assemblyPaths(tempDir: Path, classpath: PathFinder, extraJars: PathFinder, exclude: PathFinder => PathFinder) =
         {
                 val (libs, directories) = classpath.get.toList.partition(ClasspathUtilities.isArchive)
                 for(jar <- extraJars.get ++ libs) FileUtilities.unzip(jar, tempDir, log).left.foreach(error)
                 val base = (Path.lazyPathFinder(tempDir :: directories) ##)
                 (descendents(base, "*") --- exclude(base)).get
         }

         lazy val assembly = assemblyTask(assemblyTemporaryPath, assemblyClasspath, assemblyExtraJars, assemblyExclude) dependsOn(compile)
         def assemblyTask(tempDir: Path, classpath: PathFinder, extraJars: PathFinder, exclude: PathFinder => PathFinder) =
                 packageTask(Path.lazyPathFinder(assemblyPaths(tempDir, classpath, extraJars, exclude)), assemblyOutputPath, packageOptions)
 }
14
ответ дан 29 November 2019 в 02:57
поделиться

Это займет немного времени, но вы также можете использовать Proguard из SBT для создания отдельного JAR.

Я сделал это недавно в SBT-сборке для Scalala.

6
ответ дан 29 November 2019 в 02:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: