Автоматизация сборки проекта в Sublime Text 2 c использованием Ant

в 17:40, , рубрики: ant, Песочница, Программирование, разработка, метки: ,

В процессе разработки ПО весьма не мало зависит от используемого редактора кода. Я, поддавшись веянью моды, решил освоить текстовый редактор Sublime Text 2, слишком уж много положительных отзывов я слышу о нем. Мне самому хватало Eclipse. Но со временем в Eclipse меня стало раздражать подтормаживание интерфейса и в конечном итоге я пришел к выводу, что всех «прибамбасов» Eclipse мне не надо, а от Eclipse мне нужна лишь подстветка синтаксиса, навигация по проекту, быстрые клавиши и работа с Ant. Ant обычно в проектах у меня делал компиляцию или упаковку проекта (тут под упаковкой подразумевается распределение исходников по определенной в структуре каталогов, как это в PHP-фреймворках или в RubyOnRails нужно) и отправку итога на веб сервер по FTP. Начиная работу с Sublime Text 2, мне не хотелось переключаться на консоль для вызова Ant, а использовать его непосредственно в интерфейсе Sublime Text 2. И решение было найдено.

1.Подготовка

Итак, что у нас есть:

  • рабочая машина у нас с Windows
  • установлен JDK и на его директорию «bin» есть ссылка в переменной среды PATH
  • установлен Ant и на его директорию «bin» есть ссылка в переменной среды PATH
  • установлен редактор Sublime Text 2 (хотя тут я приведу все для portable версии)

Перво-наперво открываем в Sublime Text 2 нашу папку с исходниками «File»->«Open Folder...» и сохраняем манифест проекта «Project»->«Save Project As...», допустим это «helloworld.sublime-project», в корень.

2.Проверка работоспособности вызова Ant в Sublime Text 2

Для примера создадим в корневой директории проекта файл «build.xml» следующего содержания:

<?xml version="1.0"?>
<project name="helloworld" default="test">
 <target name="test">
  <echo>Ant works in '${ant.project.name}' project!</echo>
 </target>
 <target name="init">
  <echo>Some initial logic in '${ant.project.name}' project!</echo>
 </target>
 <target name="trial" depends="init">
  <echo>Some trial logic!</echo>
 </target>
 <target name="build" depends="init">
  <echo>Some build logic!</echo>
 </target>
</project>

и попробуем Ant:

  1. «Tools»->«Build System»->«Ant»
  2. «Tools»->«Build» или «Ctrl+B» или «F7»

и должно появиться внизу у Sublime Text 2:

Buildfile: *helloworldbuild.xml
test:
 [echo] Ant works in 'helloworld' project!
BUILD SUCCESSFUL
Total time: 0 seconds
[Finished in 2.1s]

Было обнаружено, что может возникнуть ситуация, когда Ant даже не вызовется. Симптом был такой: при запуске «Tools»->«Build» внизу в статусбаре говорилось «Building» и ничего не происходило. Открываем Sublime консоль через «Ctrl+`» и видим ошибки:

Running ant.bat
Traceback (most recent call last):
 File ".sublime_plugin.py", line 337, in run_
 File ".exec.py", line 154, in run
 File ".exec.py", line 45, in __init__
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc0 in position 9: ordinal not in range(128)

Нужно заменить в «exec.py» (*SublimeText2DataPackagesDefault для portable версии) строку:

proc_env[k] = os.path.expandvars(v).encode(sys.getfilesystemencoding())

на:

proc_env[k] = os.path.expandvars(v.decode(sys.getfilesystemencoding())).encode( sys.getfilesystemencoding() )

и теперь все должно работать.

3.Создаем свой Build в Sublime Text 2

В пункте 2 продемонстрировано, что Sublime Text 2 изначально позволяет использовать из «build.xml» только «default» цель или связанный с ней каскад целей (выше это просто «test»). А мне, как я сказал ранее, нужно вызывать еще и отличные от «default» конечные цели «trial» и «build». Поскольку мы удостоверились, что Ant работает, то просто заменим «default» цель с «test» на «build» и пользуемся горячими клавишами «Ctrl+B» или «F7».

Buildfile: *helloworldbuild.xml
init:
 [echo] Some initial logic in 'helloworld' project!
build:
 [echo] Some build logic!
BUILD SUCCESSFUL
Total time: 0 seconds
[Finished in 0.4s]

А для цели «trial» я создал свой «Build System», используя «Tools»->«Build System»->«New Build System...», и сохранил файл в директории *SublimeText2DataPackagesUser (для версии portable), хотя директорию Sublime Text 2 сам предложит нужную

# файл "Ant TRIAL.sublime-build"
{
 "cmd": ["ant.bat", "trial"]
}

тут еще можно задать много интересных параметров.
Автоматически в меню должен появиться пункт «Tools»->«Build System»->«Ant TRIAL», выбираем его и пользуемся «Ctrl+B» или «F7» для сборки триальной версии. Если нужно итоговую сборку сделать, то переключаемся на «Tools»->«Build System»->«Ant» и пользуемся «Ctrl+B» или «F7». Но нам же и этого мало.

4.Настройка сочетаний клавиш в Sublime Text 2

Зачем постоянно переключаться между «Ant TRIAL» и «Ant», хотя у меня не часто это происходит. Назначим быстрые клавиши «Preferences»->«Key Bindings — User»:

[
 { "keys": ["f8"], "command": "exec", "args": {"cmd": ["ant.bat","trial"]} }
]

это подсмотрел в «Preferences»->«Key Bindings — Default»:

...
 { "keys": ["ctrl+break"], "command": "exec", "args": {"kill": true} }
...

Вернемся к «Tools»->«Build System»->«Ant», жмем «F8» и получаем «trial»:

Buildfile: *helloworldbuild.xml
init:
 [echo] Some initial logic in 'helloworld' project!
trial:
 [echo] Some trial logic!
BUILD SUCCESSFUL
Total time: 0 seconds
[Finished in 0.4s]

а жмем «F7» и получаем «build»:

Buildfile: *helloworldbuild.xml
init:
 [echo] Some initial logic in 'helloworld' project!
build:
 [echo] Some build logic!
BUILD SUCCESSFUL
Total time: 0 seconds
[Finished in 1.0s]

Заключение

Все, теперь мы можем использовать Ant непосредственно в интерфейсе Sublime Text 2. Нюанс лишь в том, что теперь у всех ваших проектов их «build.xml» должен содержать указанные цели — «trial» и «build» (или отличную от «build», указанную в свойстве «default» у «project» в «build.xml»).

Думаю, не мне одному это будет полезно для старта с Sublime Text 2.

Спасибо за внимание.

Автор: BorisPlus

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js