Grails: Как ссылаться на ресурс, расположенный внутри установленного плагина?

У меня есть плагин Grails, который я использую в качестве контейнера для некоторых общих статических ресурсов, которые будут использоваться различными другими проектами Grails (CSS, JS-файлы и т. Д.). Идея использования плагина состояла в том, чтобы просто поделиться этими вещами - плагин на самом деле не делает ничего более интересного. Каков наилучший способ напрямую ссылаться на ресурсы внутри плагина? Я бы предпочел не создавать пользовательские теги, так как я не добавляю здесь никакой функциональности; Я просто хочу получить доступ к ресурсам внутри плагина - что-то вроде этого, например, для ссылки на файл CSS из GSP:

<g:link rel="stylesheet" url="${resource(dir:'css', file:'mycss.css',
plugin:'myplugin')}"/>

Нарушает ли эта идея концепцию плагинов, где должны быть раскрыты только некоторые ее аспекты, а остальное - черный ящик? Альтернативные подходы к разделению статических ресурсов между смежными проектами Grails также приветствуются, на случай, если я даже попытаюсь пойти по безумному, ошибочному пути.:)

1 ответ

Решение

Во-первых, в Grails плагин не считается черным ящиком. Наоборот, весь код разоблачен; если вы действительно хотите сделать его черным ящиком, то вам следует использовать другой плагин, Binary Artifacts.

Во-вторых, ваш подход очень разумный. Чтобы получить доступ к ресурсам плагина, я бы создал тег taglib:

def res = { attrs -> 
  attrs.dir=pluginContextPath
  //Do whatever you want here
  out << g.resource(attrs) 
}

и назвать это так же, как <g:resource>, Таким образом, вам даже не нужно раскрывать путь ресурсов вашего плагина. Плагин Nimble использует этот подход.

Также вы можете взглянуть на плагин Grails Resources, который пытается справиться с кошмаром статических зависимостей ресурсов среди плагинов и проектов Grails. Я никогда не использовал его, но наверняка в своем следующем проекте Grails я включу его (кстати, он будет включен в Grails 1.4).

Другие вопросы по тегам