Scala: создание небольшого исполняемого Jar-файла с использованием внешних библиотек Scala - PullRequest
8 голосов
/ 18 апреля 2011

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

  • упаковал JAR с помощью sbt -> будет работать с
scala -cp myjarfile.jar MyClass

или

java -classpath path\to\scala-library.jar;myjarfile.jar MyClass

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

java -jar myjarfile.jar

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

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

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

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

Спасибо!Pierric.

1 Ответ

3 голосов
/ 18 апреля 2011

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

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

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

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

Редактировать

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

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

...