Введение в sbt

    Этим постом, я попробую начать серию переводов официальной документации, об инструменте, который при текущем росте языка Scala становится все более востребованным, но о котором тем не менее очень мало информации на русском языке.
    Речь пойдет о sbt — системе сборки проектов для языка Scala (хотя, важно упомянуть, что Java проекты (и вообще любые другие) им так же могут собираться).
    Статья является началом перевода документации с сайта проекта scala-sbt.org и так как это мой первый опыт перевода — буду рад любым замечаниям и правкам.
    Так же, из-за того, что пока перевод оформлен в виде статьи, я буду пропускать моменты, которые смотрелись бы не совсем корректно, в контексте отдельной части руководства.

    Предисловие


    sbt, используя небольшое число концепций, предлагает гибкие решения сборки проектов.
    Это руководство расскажет о некоторых моментах, которые необходимы для создания и поддержки решений по сборке с помощью sbt.
    Данное руководство, очень рекомендовано к прочтению. Но, если вам некогда читать все, то самую важную информацию вы можете прочитать в разделах “Параметры .sbt сборки”, “Области сборок”, “Дополнительные параметры сборок”. Но, мы не обещаем, что эта хорошая идея поможет вам пропустить все страницы данного руководства.
    Лучше всего читать этот документ последовательно, опираясь на пройденный ранее материал.
    Спасибо, что используете sbt! Желаем вам получить от этого максимум удовольствия!

    1. Установка sbt


    Для создания sbt проекта вам нужно сделать следующие шаги:
    • Установить sbt и создать скрипт запуска
    • Создать простой проект “Hello world”
    • Создать директорию проекта с исходными файлами внутри
    • Описать параметры сборки
    • Прочитать как запустить sbt
    • Продолжить чтение руководства о параметрах sbt сборки

    В конечном счете, установка сводиться к запуску JAR файла и shell скрипта. Но, мы опишем несколько путей для разных платформ, которые могут сделать установку менее утомительной.
    Если у вас появились проблемы с запуском sbt, смотрите раздел “Примечания к установке”.

    1.a. Установка под Mac

    С помощью Macports
    $ port install sbt
    Homebrew
    $ brew install sbt

    1.b. Установка под Windows

    Просто скачайте инсталятор msi и запустите его.

    1.c. Установка под Linux

    Официально поддерживаемые дистрибутивы:
    RPM пакет
    DEB пакет

    В дальнейшем я расскажу о том, как можно скачать и настроить sbt вручную. А пока что, самое интересное.

    2. Hello, World


    Создаем директорию проекта с исходным кодом

    Одним из корректных вариантов sbt проекта, может быть директория, содержащая один файл с исходным кодом. Попробуйте создать директорию hello с файлом hw.scala, со следующим содержимым:
    object Hi {
      def main(args: Array[String]) = println("Hi!")
    }
    

    Теперь, в самой директории запустите sbt и наберите команду run в интерактивной консоле. В Linux или OS X это выглядить примерно так:
    $ mkdir hello
    $ cd hello
    $ echo 'object Hi { def main(args: Array[String]) = println("Hi!") }' > hw.scala
    $ sbt
    ...
    > run
    ...
    Hi!
    

    При создании проекта, sbt работает в соответствии со следующими правилами:
    • Исходник лежит в корневой директории
    • Исходники лежат в директории src/main/scala или src/main/java
    • Тесты лежат в src/test/scala или src/test/java
    • Файлы ресурсов в src/main/resources или src/test/resources
    • Файлы jar в директории lib

    По умолчанию, sbt соберет проект той версией scala, с помощью которой sbt был запущен сам.
    Кроме запуска консоли, проект можно сразу запустить на выполнение командой sbt run.

    Параметры сборки

    Большинство проектов, все же нуждаются в более сложной настройке процесса сборки. В sbt основные параметры сборки хранятся в файле build.sbt в корневой директории проекта.
    Например, если для нашего проекта hello создать файл настроек, то выглядеть бы он мог примерно так:
    name := "hello"
    
    version := "1.0"
    
    scalaVersion := "2.10.3"
    

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

    Установка версии sbt

    Вы можете принудительно скачать и установить нужную версию sbt если пропишете в файле hello/project/build.properties следующую строчку:
    sbt.version=0.13.5
    Теперь, при запуске будет использоваться версия sbt 0.13.5. Если ее нет, то скрип скачает и установит ее в системе.
    Хранить версию sbt следует именно в файле project/build.properties для избежания возможных колизий.

    В качестве заключения


    Для эксперимента, я решил ограничиться только этими самыми первыми разделами, и если реакция будет более-менее положительной, надеюсь продолжить переводить и остальные.

    P.S. Буду очень признателен, за указанные неточности и замечания перевода. Спасибо!
    Поделиться публикацией

    Похожие публикации

    Комментарии 11

      0
      Вы немного неправильно описали про build.properties. Этот файл используется скриптом из sbt-extras (https://github.com/paulp/sbt-extras/blob/master/sbt) и который уже может выбирать версию при запуске.
      А ту установку что вы указали — установит sbt-laucher и скрипт запуска, который тупо передает параметры запуска скрипта в sbt-laucher и задает параметры запуска java. То есть устанавливается просто последняя версия sbt.
        0
        Спасибо, за замечание.
        Просто авторы документации, видимо считают, что нет смысла объяснять более глубокие принципы в первых главах — поэтому пропустили этот момент и написали упрощенно, что вот такое действие, делает вот такую штуку.
          +1
          Как я понимаю, этот файл используется не только указанным Вами скриптом, но и launcher'ом, установка которого описана в системе. В системе может быть установлен sbt 0.13.0 а в build.properties указан 0.13.5. Тогда именно библиотеки последнего будут загружены при запуске и использоваться при сборке

          www.scala-sbt.org/0.13.2/docs/Community/Nightly-Builds.html
          remember that an sbt.version setting in <build-base>/project/build.properties determines the version of sbt to use in a project. If it is not present, the default version associated with the launcher is used.
            0
            Да, вы правы. Я не знал про это изменение в 0.13.x.
          0
          Официальная документация довольно сумбурная, содержит мало хороших примеров решения типичных задач и вообще пока еще явно сыровата. Ну и даже для введения это слишком, слишком мало. Никакого обзора sbt, ни сравнения с другими task-runner'ами, не рассказано, почему именно такая структура проекта принята итд итп etc etc.

          Мне кажется лучше было бы постараться изложить основы sbt в менее фрагментированном формате и больше ориентироваться на решение практических задач.
            0
            Насчет документации — соглашусь ( некоторые отдельные статьи на эту тему много полезнее. Но цель, во первых проверить, нужно ли переводить именно официальную документацию — отсюда и пока небольшой объем (решил что Hello world полностью отвечает требования начального обзора :)) и во вторых, так как это все таки больше перевод — то за рамки источника старался не выходить и не писать много лишнего.
              0
              То, на что дана ссылка в статье — введение. (Getting Started with sbt). Она делает довольно краткий и хороший обзор возможностей и основных концепций sbt.

              За подробностями можно обратиться в «sbt Reference Manual» www.scala-sbt.org/0.13/docs/index.html

                0
                Все верно, я неверно написал название топика. Спасибо
              +1
              Из собственной практики, sbt в систему никогда не устанавливаю. Вместе этого кладу базовый скрипт в директорию проекта. Упрощает процесс запуска на других машинах, так как не требует дополнительных установок и версия указана непосредственно в системе контроля версий.

              Получается что для сборки проекта в системе необходима только Java.
                –1
                По языку: в целом неплохо, хотя местами корявовато. Можно более свободно формулировать предложения на русском, а не стараться быть аналогом подстрочного перевода.
                Много лишних запятых (например, после «но» запятая не ставится), есть парочка любиых всеми ошибок типа «мне нравиться».
                  0
                  Слишком мало. Пишите больше! Было бы интересно посмотреть на сложные структуры с вложенными модулями.

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

                  Самое читаемое