суббота, февраля 23, 2008

Выкат GWT-RPC приложения на Tomcat из-под Eclipse

Решил написать краткую инструкцию по выкату GWT-RPC приложения под Томкат. Стандартный способ который даже вроде бы упоминается в доках, гласит примерно следующее - скомпиляйте клиентскую часть в яваскрипт, отдельно скомпиляйте серверную часть и выкатите куда вам надо.

Всё правильно конечно, но это можно делать с разной эффективностью. Особенно компилять серверную часть(те кто юзал GWT давно должны помнить хаки к которым приходилось прибегать)... На самом деле есть вполне конкретные удобные варианты быстрого deploy'я приложения GWT-RPC на Tomcat. Один из них заточенный под Eclipse я и распишу. Соль этого варианта - быстро сделать WAR-файл и выкатывать уже его.

Итак то что нужно сделать для начала(только один раз):
  • открыть {PF}\www\com.domain.{Project}
  • создать новую директорию WEB-INF
  • открыть {PF}\www\com.domain.{Project}\WEB-INF
  • создать файл web.xml и прописать туда что нужно
  • создать новую директорию lib
  • открыть {PF}\www\com.domain.{Project}\WEB-INF\lib
  • скопировать gwt-servlet.jar из дистрибутива GWT в {PF}\www\com.domain.{Project}\WEB-INF\lib
Это надо делать каждый раз для получения WAR-файла:
  • запустить скрипт {PF}\{Project}-compile
  • в Eclipse выбрать папку src
  • нажать Export (в выпадающем меню или в меню "File")
  • выбрать экспорт в "JAR file"
  • отметьте "Export generated class files and resources"
  • отметьте "Export java source files and resources"
  • установите export destination в {PF}\www\com.domain.{Project}\WEB-INF\lib\{Project}.jar
  • отметьте "Compress the contents of the JAR file"
  • дважды нажмите Next
  • выберите "Generate the manifest file" (если не выбран)
  • не отмечайте "Save the manifest in the workspace"
  • "Seal the contents" - должно быть выбрано "Seal some packages" ... "Nothing sealed"
  • оставьте поле "Main class" пустым
  • жмём "Finish"
  • открываем {PF}\www\com.domain.{Project}
  • упаковываем все файлы и директории в zip-файл с именем {Project}.war
  • кидаем {Project}.war томкату внутрь (зависит от того куда именно вы хотите выкатить проект)
Обозначения:
{PF} - путь к проекту (например /home/gwt_project1)
{Project} - название проекта (например Calendar)

Вобщем лично мне такой подход сильно экономит время. Те кто использают не Eclipse - могут модифицировать всё тут описанное в скрипт для ant ну или ещё во что-то, никакой особой магии тут не используется...

В принципе идея взята отсюда но там автор (видимо после множества редакций) перевирает с путями местами.

5 комментариев:

Den комментирует...

Хм. И так делать каждый раз? Мне кажется работать надо только с помощью ant

Лаврентий Палыч комментирует...

Да это можно автоматизировать с помощью ant или ещё как(кому как удобнее), просто я поленился тут это расписывать. Да и поковырявшись ещё немного ушёл с эклипса на NetBeans (вот тут в PS я об этом написал ) - там всё гораздо лучше для GWT RPC, у меня один проект вообще перестал запускаться под эклипс по непонятным причинам... Единственное под NetBeans заметно выросло время компиляции - видимо что-то там неоптимально в build-файле прописано, такая проблема в принципе судя по сообщениям в google groups не только у меня. Но зато без всяких костылей умеет делать war-ку (ну за исключением того что пихает туда jar-ки ненужные для deploy'я, но это быстро правится) да и вообще не глючит при усложнении серверной части как это делает у меня эклипс.

ubyrvalg комментирует...

А Вы поставьте вот это: http://www.cypal.in/studio - и все будет автоматизировано, и создание проекта, и запуск отладки, и формирование war. Инструкция там же на сайте.

Den комментирует...

Ага а через 6 месяцев надо будет что-то в проекте поменять и без наличия cypal которая к слову платная war сделать будет невозможно.
Очент радостная перспектива :-)

Лаврентий Палыч комментирует...

Ну вообще вроде оно бесплатное и даже исходники лежат на гуглокоде. Правда пока непонятно кто за этим проектом я использовать его обожду - так может посмотреть/поиграться. Но вообще вроде усиленно развивается он.