Статьи

Grails Good: использование Wrapper для запуска команд Grails без установки Grails

Начиная с Grails 2.1 мы можем создавать оболочку Grails. Оболочка позволяет разработчику запускать команды Grails в проекте без предварительной установки Grails. Концепция обертки также доступна в других проектах из экосистемы Groovy, таких как Gradle или Griffon. Оболочка — это сценарий оболочки для Windows, OSX или Linux с именем grailsw.batили grailswпарой файлов JAR для автоматической загрузки определенной версии Grails. Мы можем проверить скрипты оболочки и вспомогательные файлы в системе контроля версий и сделать ее частью проекта. Разработчики, работающие над проектом, просто проверяют код и запускают сценарий оболочки. Если установка Grails недоступна, она будет загружена.

Чтобы создать сценарии оболочки и вспомогательные файлы, кто-то в проекте должен выполнить команду обертки в первый раз. Этот разработчик должен иметь действующую установку Grails. Затем сгенерированные файлы могут быть добавлены в систему контроля версий, и с этого момента один разработчик может использовать сценарии grailswили grailsw.batоболочки.

$ grails wrapper
| Wrapper installed successfully
$ 

В корне проекта у нас есть два новых файла grailswи grailsw.bat. Пользователи Windows могут использовать grailsw.batи другие операционные системы, которые мы используем grailsw. Также создается новый каталог wrapperс тремя файлами:

grails-wrapper-runtime-2.2.0.jar
grails-wrapper.properties 
springloaded-core-1.1.1.jar

Когда мы запускаем сценарии grailswor grailsw.batв первый раз, мы видим, как Grails загружается и устанавливается в $USER_HOME/.grails/wrapperкаталог. Следующий вывод показывает, что файл загружается и извлекается, когда мы ранее не запускали grailswскрипт:

$ ./grailsw --version
Downloading http://dist.springframework.org.s3.amazonaws.com/release/GRAILS/grails-2.2.0.zip to /Users/mrhaki/.grails/wrapper/grails-2.2.0-download.zip
.....................................................................................
................................................................
Extracting /Users/mrhaki/.grails/wrapper/grails-2.2.0-download.zip to /Users/mrhaki/.grails/wrapper/2.2.0

Grails version: 2.2.0

Когда мы хотим использовать новую версию Grails одной из потребностей разработчиков бежать запустить $ grails upgradeзатем $ grails wrapperс новой версией Grails. Обратите внимание, что этот разработчик должен иметь локально установленную версию Grails той версии, для которой мы хотим создать оболочку. Вновь созданные файлы могут быть возвращены в систему контроля версий, и все разработчики проекта получат новую версию Grails при запуске сценариев grailsили grailsw.batсценариев оболочки.

$ ./grailsw --version
Downloading http://dist.springframework.org.s3.amazonaws.com/release/GRAILS/grails-2.2.1.zip to /Users/mrhaki/.grails/wrapper/grails-2.2.1-download.zip
.....................................................................................
...
................................................................
Extracting /Users/mrhaki/.grails/wrapper/grails-2.2.1-download.zip to /Users/mrhaki/.grails/wrapper/2.2.1

Grails version: 2.2.1

Мы можем изменить местоположение загрузки Grails, например, для URL-адреса внутренней сети компании. В wrapper/каталоге мы видим файл grails-wrapper.properties. Файл имеет одно свойство wrapper.dist.url, на которое ссылается по умолчанию http://dist.springframework.org.s3.amazonaws.com/release/GRAILS/. Мы можем изменить это на другой URL, добавить изменение в контроль версий, чтобы другие разработчики получили изменение автоматически. И когда grailswсценарий оболочки будет выполнен, местом загрузки будет другой URL. Чтобы задать другой URL-адрес для загрузки при создании оболочки, мы можем использовать параметр командной строки —distributionUrl :

$ grails wrapper --distributionUrl=http://company.intranet/downloads/grails-releases/

Если нам не нравится имя каталога по умолчанию для хранения вспомогательных файлов, мы можем использовать параметр командной строки —wrapperDir . Затем файлы сохраняются в заданном каталоге, grailswа grailsw.batсценарии оболочки и будут содержать заданное имя каталога.

Написано с Grails 2.2.0 и 2.2.1