Grails console: импорт доменных классов

· На чтение уйдёт 1 минута · (210 слов)

Для Grails есть замечательный плагин console. Один минус у него: при структуре проекта чуть сложнее Hello World, когда в проекте десятки или сотни пакейджей, например — надо обязательно осуществлять импорт доменных классов вручную. А это — лишнее время, причём тратится оно не разово, а раз в рестарт сервера.

К сожалению, добраться до GroovyShell, в котором выполняется введённый пользователем код — кажется, нереально, Хотя силён и могуч Groovy, но вроде бы там даже кложеров не используется, которые было бы можно заменить. Тогда я пошёл другим путём, через фильтры.

class ConsoleFilters {
	def filters = {
		all(controller: 'console', action: '*') {
			before = {
				if (!session['_grails_console_last_code_']) {
					session['_grails_console_last_code_'] = '''\
import ru.bytexgames.berserk.*
// vars: ctx; grailsApplication; config; request; session. E.g.: ctx.getBean("bankService")
'''
				}
			}
		}
	}
}

Этот код перехватывает любые обращения к контроллеру console (хотя вообще говоря, достаточно лишь только экшена index). Если до этого не исполнялся никакой код, в textarea пишем приведённый выше текст. Стандартное поучение на 5 строчек — хорошо для новичков, но простого списка доступных переменных, думаю, достаточно.

На самом деле, конечно, плагин нуждается в дополнительных улучшениях — попробую посмотреть, что с этим можно сделать :) Но как стартовая точка для оптимизации — вполне пойдёт и автоимпорт доменных классов. Просто создайте по фильтру на каждый ваш проект ;)

Полезное