Scala: создание небольшого исполняемого файла Jar на основе внешних библиотек Scala



Я пытаюсь упаковать небольшое приложение (все еще изучаю Scala!) в "чистом виде". Цель состоит в том, чтобы иметь исполняемый файл JAR. Я сделал следующее:




  • упаковал банку с помощью sbt - > будет работать с



scala -cp myjarfile.jar MyClass



Или




java -classpath pathtoscala-library.jar;myjarfile.jar MyClass



Но не будет работать с




java -jar myjarfile.jar



Потому что тогда scala/ScalaObject не может быть найден. И нет смысла добавлять путь к классу на этом последнем, так как параметр-jar будет игнорировать параметр-classpath. Обратите внимание, что я добавил Scala libs в мою системную переменную CLASSPATH, но она, похоже, тоже игнорируется, когда используется-jar.




  • добавил содержимое библиотеки scala (предварительно распаковав его) в банку, созданную sbt. Это затем работает (jar можно дважды щелкнуть и запустить), но манипуляция несколько длительна, и результирующий файл составляет несколько мегабайт. Не идеальный.


После нескольких часов поиска в гугле я не вижу способа создать небольшой файл jar, который запустится, когда двойной щелчок, и это не влечет за собой болезненных манипуляций. Чего мне не хватает? Я предполагаю, что должен быть какой-то способ определить, где находятся библиотеки scala на системном уровне. Как вы справляетесь с небольшими приложениями, которые вы хотите скомпилировать и подготовить к запуску для повышения эффективности?



Обратите внимание, что пока я использую sbt, у меня нет под рукой инструмента jar (я полагаюсь на JRE, а не на JDK).

Спасибо!
Пьеррик.

660   1  

1 ответ:

Для меня работает следующая настройка:

  • иметь scala-library.jar в той же папке, что и исполняемый файл jar (и вызывать java оттуда)
  • внесите это в свой манифест.: Class-Path: scala-library.jar

Другой вариант-объединить содержимое scala-библиотеки.jar в вашу банку приложения. Недостаток в том, что это увеличит его размер. Но вы можете использовать Proguard, чтобы удалить неиспользуемые классы из вашей последней банки. Я думаю, что есть простой способ использовать sbt для упаковки исполняемого файла jar с помощью помощью ProGuard.

Что касается сокращения с помощью Proguard, вы можете посмотреть наэту страницу . Речь идет о разработке Android; просто проигнорируйте эту часть и посмотрите на таблицы сокращающихся результатов. Некоторые примеры приложений сжимаются до менее чем 100 кб.

Edit

Возможно, вам нужно немного уточнить свой вопрос. Чего вы пытаетесь достичь? Вы хотите установить программу только в вашей системе или вы хотите распространять ее?

Если все, что вы хотите, это быстрый запуск Java-приложения без особого влияния на время запуска JVM вы можете посмотреть на nailgun.

Comments

    Ничего не найдено.