Первая полезная программа на Groovy
Когда изучают некий язык программирования и говорят «Давайте рассмотрим простую программу на данном языке», то в качестве примера выбирают какую-нибудь бесполезную задачу типа вывода на экран Hello World или вычисление факториала. Но Groovy — язык для получения быстрых результатов. Ему не свойственна академичность Java. Это, если угодно, средство из серии Quick & Dirty. Зачем тратить время на разбор примеров, если можно сразу, с места в карьер написать что-то полезное? Как раз такая сиюминутная задача и встала передо мной вчера: нужно было организовать шаблон для проектов, т.к. надоело вручную выполнять одни и те же рутинные операции. Итак, от скрипта требовалось:
1. Создать каталог проекта и структуру подкаталогов.
2. В некоторых подкаталогах создать файлы Main.java с содержимым, соответствующим имени проекта.
3. Создать кое-где файлы build.xml, тоже с соответствующими поправками на имя проекта.
3. Создать файл .gitignore.
Вот как это выглядит с точки зрения
Может на первый взгляд это и выглядит пугающе, но поверьте мне, я эту задачу как только не пытался решать: и bash-скрипты писал, и java-утилиты. Работать-то оно работало, но и написание занимало сравнительно много времени, и что-то подправить было иногда не просто (через некоторое время забываешь, что хотел сказать в программе, не можешь разобраться в собственном коде и это нормально!). А здесь — 10 минут — и пожалуйста: и работает как надо, и кратко, и выбросить в случае чего не жалко.
1. Создать каталог проекта и структуру подкаталогов.
2. В некоторых подкаталогах создать файлы Main.java с содержимым, соответствующим имени проекта.
3. Создать кое-где файлы build.xml, тоже с соответствующими поправками на имя проекта.
3. Создать файл .gitignore.
Вот как это выглядит с точки зрения
#!/usr/bin/groovy
assert args != null // Проверяем, что скрипту переданы аргументы,
assert args.size() > 0 // т.к. имя проекта - как раз и есть аргумент скрипта
def dir = new File(args[0]) // Каталог проекта
['.output', '.design', '.tmp', 'client', 'server'].each{ // Вот она, знаменитая мощь Groovy при работе со списками!
def subdir = new File(dir, it)
subdir.mkdirs() // Создаем подкаталог для каждого элемента списка
if(it[0] != '.'){
// Если имя подкаталога не начинается с точки - пишем в него шаблон программы,
// на лету вставляя нужное слово.
// Тройные кавычки - замечательное изобретение для
// работы с многострочным текстом.
new File(subdir, 'Main.java').write(
"""package com.michaelbelyakov1967.projects.${args[0]}.$it;
public class Main{
}"""
)
new File(subdir, 'build.xml').write(
// Так же поступаем и с build.xml, но поскольку в нем много двойных кавычек -
// используем для формирования многострочного текста тройные одинарные,
// а в конце делаем replace.
'''<?xml version="1.0"?>
<project name="" default="all">
<description>HZ</description>
// Тут еще очень много перенесенного через копипаст текста,
// сокращаю для повышения читаемости кода.
<property name="package" value="HZ_PROJECT"/>
</project>'''.replaceAll('HZ_PROJECT', "${args[0]}")
)
}
}
new File(dir, ".gitignore").write(".*/**") // Пишем файл .gitignore
Может на первый взгляд это и выглядит пугающе, но поверьте мне, я эту задачу как только не пытался решать: и bash-скрипты писал, и java-утилиты. Работать-то оно работало, но и написание занимало сравнительно много времени, и что-то подправить было иногда не просто (через некоторое время забываешь, что хотел сказать в программе, не можешь разобраться в собственном коде и это нормально!). А здесь — 10 минут — и пожалуйста: и работает как надо, и кратко, и выбросить в случае чего не жалко.
Комментарии (4)
RSS свернуть / развернутьSergei_T
Engineer
yababay
Sergei_T
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.