Итак, сегодня мне вдруг захотелось написать проект на Scala.
Как быть? Куда бежать?
Для проекта требуется:
- Скрипт сборки для работы без IDE
- Возможность запускать тесты при помощи скрипта сборки
- Маленький скрипт сборки, лучше без XML
- Возможность генерации проектных файлов IDE с настроенным окружением для работы
- Интеграция с IDE на уровне зависимостей
В наличии IDE IntelliJ Idea и Scala 2.9.1
Для решения нашей задачи лучше всего подошёл Gradle: он позволяет описывать проект на простом DSL, умеет подтягивать зависимости из Maven-репозиториев и хорошо интегрируется с IntelliJ Idea.
В процессе настройки файла сборки очень помогла пара плагинов: https://github.com/rodionmoiseev/gradle-plugins
Пишем скрипт сборки build.gradle:
1. Группа, версия, описание
Имя проекта по-умолчанию берётся из имени корневой директории. Если хотите переопределить, то используйте свойство ext.name
1 2 3 |
group = 'org.strangeway' version = '0.1' description = 'Scientific Scala' |
2. Подключаем репозитории с зависимостями и плагины для Gradle
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
buildscript { repositories { maven { url "https://raw.github.com/rodionmoiseev/maven-repo/master/repo/releases" } } dependencies { classpath group: 'org.rodion.gradle', name: 'idea-scala-plugin', version: '0.2' classpath group: 'org.rodion.gradle', name: 'idea-utils-plugin', version: '0.1' } } apply plugin: 'scala' apply plugin: 'java' apply plugin: 'idea-utils' apply plugin: 'idea-scala' repositories { mavenCentral() } |
3. Указываем зависимости проекта и версию JDK 1.7
1 2 3 4 5 6 7 8 9 10 11 |
sourceCompatibility = 1.7 def scalaVersion = '2.9.1' dependencies { testCompile 'org.testng:testng:6.8' scalaApi(group: 'org.scala-lang', name: 'scala-library', version:scalaVersion) scalaTools(group: 'org.scala-lang', name: 'scala-library', version:scalaVersion) scalaTools(group: 'org.scala-lang', name: 'scala-compiler', version:scalaVersion) } |
4. Настраиваем интеграцию с Idea: тип VCS и лицензия, зависимости будут добавлены автоматически
1 2 3 4 5 6 7 8 9 10 11 |
idea { project { vcs { vcs = 'Git' } copyright { name = 'The BSD 3-Clause License' license = file('LICENSE') } } } |
Думаю, проще просто некуда!
Запускаем генерацию проектных файлов:
1 |
> gradle idea |
Открываем проект в Intellij Idea, идём пить кофе довольные собой.
Ссылки:
- Система сборки Gradle: http://www.gradle.org/downloads
- Gradle плагины для интеграции с Idea от rodionmoiseev: https://github.com/rodionmoiseev/gradle-plugins