Я работаю над приложением Grails 2.4.2, и такая же база кода используется для множества клиентов. Каждый клиент получает веб-интерфейс, основанный на GSP, с индивидуальными значками, текстовыми строками и т. Д. Я убедился, что настройки выполняются на страницах GSP с использованием переменных Groovy, определенных в Config.groovy. То есть что-то вроде этого:Скомпилированы страницы GSP, связанные с контекстным путем?
customerName = ''
favicon = ''
if (appName == 'foo') {
customerName = 'Foo'
favicon = "favicon_${appName}.ico"
}
Эти переменные затем ссылаются на страницы GSP. Это прекрасно работает. Проблема в том, что для каждого клиента требуется отдельный файл войны. Таким образом, сервер CI создает войну для клиента A, затем запускает grails clean, изменяет имя приложения и т. Д. В файле application.properties, строит войну для клиента B и т. Д. Каждая сборка военного файла занимает около 4,5 м, умноженная на 10 клиентов строит. Поэтому я подумал, что лучшим способом было бы создать военный файл один раз, а затем CI-сервер скопировал его N раз и изменил бы файл application.properties с именем клиента, контекстом контекста сервлетов и т. Д. Внутри каждого военного файла , Кто-то указал мне, что страницы GSP скомпилированы во время сборки файла войны, и что они заканчивают путь контекста как часть имени класса. Мне это кажется немного странным. То есть допустим, у меня есть клиент «Foo», и я решил создать военный файл с именем foo.war, который будет развернут в контексте контекста сервлета/foo. Скомпилированный результат для страницы «bar.gsp» будет что-то вроде этого:
WEB-INF/classes/gsp_foo_bar.class
WEB-INF/classes/gsp_foo_bar_gsp_html.data
WEB-INF/classes/gsp_foo_bar_gsp_linenumbers.data
Я экспериментировал с принятием уже скомпилированный войны файл для клиента А, изменив название приложения и контекст, и переброски его в качестве клиент B. Он отлично работает, и я вижу значки клиента B и т. д. Итак, сводка вопроса, на мой взгляд, сводится к тому, связывает ли страница _foo_ страницу с контекстным путем/foo, или если это просто косметическая штука? Я, конечно, не хочу, чтобы удар производительности ленивой компиляции или перекомпиляции во время выполнения. И поскольку содержимое страницы GSP в этом случае в основном статично и не изменяется, похоже, что его не нужно привязывать к контексту или имени приложения. Кто-нибудь знает, является ли это просто именованием, или я столкнулся с проблемами, не перекомпилируя войну, когда я меняю имя приложения/контекст? Может быть, есть лучший способ выполнить то, что я хочу? Благодарю.
Название внутреннего класса ваших GSPS это просто способ назвать их. Какова ваша настоящая проблема? Вы можете развернуть ту же войну с разными именами путей контекста на одном сервере без каких-либо проблем. Ты пробовал? – albertovilches
Спасибо albertovilches. Да, я пробовал, но не был уверен, есть ли недостаток, например, приложение не может использовать скомпилированные страницы или что-то в этом роде. Рад слышать, что это не так. – user2337270