лучшие практики Java-приложений - PullRequest
5 голосов
/ 13 мая 2010

Я пытаюсь найти оптимальный способ разработки и выпуска довольно простого веб-приложения и сталкиваюсь с несколькими проблемами. Я обрисую в общих чертах решения, которые я принял, потому что где-то я явно сошел с рельсов ... Огромная благодарность за любую помощь!

У меня есть довольно простое веб-приложение. Он содержит пару jsps, которые ссылаются на пару java-бинов, а также обычный статический html, js, css и изображения.

Решение 1) Я хотел иметь четкую и чистую процедуру выпуска, чтобы я мог разрабатывать на своей локальной машине и затем надежно выпускать на производственную машину. Поэтому я принял решение упаковать приложение в файл war (включая все статические ресурсы), чтобы свести к минимуму отдельные фрагменты, которые мне нужно будет выпустить. Пока все хорошо?

Решение 2) Я хотел, чтобы на моей локальной машине все было как можно ближе к производственной среде. Так, например, в моем html-файле может быть ссылка на статический файл, такой как http://static.foo.com/file. Чтобы этот код работал без проблем на dev и prod, я решил поместить static.foo.com в мой / etc / hosts при локальной разработке, чтобы все URL работали правильно, ничего не меняя.

Решение 3) Я решил использовать eclipse и maven, чтобы дать мне наилучшую среду для администрирования и построения моего проекта.

Итак, у меня сейчас хорошая жесткая настройка, за исключением:

Каждый раз, когда я хочу что-то изменить в разработке, например, одну строку в html-файле, мне приходится перестраивать весь проект, а затем ждать, пока tomcat загрузит войну, прежде чем я увижу, что это то, что я хотел. Итак, мои вопросы:

1) Есть ли способ соединить затмение и кота, чтобы мне не приходилось каждый раз перестраивать войну? то есть tomcat смотрит прямо на мое фактическое рабочее пространство, чтобы подавать статические файлы?

2) Я думаю, что я, возможно, усложняю ситуацию, используя / etc / hosts для отражения рабочих URL-адресов - есть ли лучший способ, который не предполагает ручного изменения URL-адресов (относительные URL-адреса хороши, конечно, но там, где вы Есть много поддоменов, скажем, один для статических файлов и один для динамических, вы, конечно, должны записать полный путь?)

3) Это действительно лучшая практика? Как люди настраивают вещи так, чтобы они уравновешивали требования к автоматизированному, всеобъемлющему процессу сборки, с одной стороны, и скорость и гибкость, чтобы иметь возможность быстро разрабатывать javascript, html и css, как если бы вы только что указали apache в каталоге и разработано вживую? Что люди находят работы?

Большое спасибо!

Редактировать: Спасибо всем за ваши отличные ответы! Если бы я мог пометить их все правильно, я бы .. Это действительно помогло мне. Я слышал о том, что наилучшей практикой является сохранение структуры веб-приложения в процессе разработки и запуск его в максимально приближенной к рабочей среде среде. Похоже, что различия между людьми заключаются в том, насколько люди готовы к оперативному развертыванию ресурсов в контейнере сервлетов, обходя процесс сборки за небольшую дополнительную скорость или удобство. В этом есть смысл. Еще раз спасибо.

Ответы [ 6 ]

4 голосов
/ 13 мая 2010

Это очень похоже на то, что я должен делать на работе, хотя мы используем муравья (пока?). Кроме того, хотя я использую IDE (или две), я отказываюсь иметь ее как часть моего процесса сборки, ВЕЗЕР. Кто-то должен уметь понимать и настраивать вашу сборку.

4 голосов
/ 13 мая 2010

Есть ли способ подключить затмение и кот, чтобы мне не пришлось каждый раз перестраивать войну?

1) Я думаю, вы слишком полагаетесь на свою IDE. Обычно у меня есть Ant build.xml, у которого есть пара задач: одна - «build war», другая - «update jsps». Сборка войны компилирует весь код, упаковывает его, развертывает в Tomcat и перезапускает все. Обновление jsps не перезагружает сервер, это просто прямая копия из моих локальных файлов в развернутый экземпляр Tomcat. Перезапуск не требуется, поскольку они являются JSP. Занимает около полсекунды.

где у вас много поддоменов, скажем один для статических файлов и один для динамический, вы должны выписать полный путь, конечно?

2) Ни за что, Хосе. То есть, когда вы меняете имя сервера, вам нужно перекомпилировать код? Если вам нужно поддерживать динамические URL-адреса, вы можете просто укусить пулю и взглянуть на структуру, чтобы сделать тяжелую работу за вас. Я неравнодушен к Stripes (который поддерживает динамическую перезапись URL-адреса "из коробки") ... есть и другие.

3 голосов
/ 13 мая 2010

Чтобы ответить на вопрос № 1, я бы предложил следующее:

  1. Потратьте некоторое время на изучение maven, чтобы построить свой .war без затмения. Это не так сложно с правильным архетипом. Подробнее смотрите здесь: http://maven.apache.org/guides/mini/guide-webapp.html
  2. Maven может генерировать проекты затмения либо через mvn eclipse:eclipse, либо используя плагин m2
  3. Для развертывания на локальном компьютере и на производстве используйте подключаемый модуль maven cargo. http://cargo.codehaus.org/Maven2+plugin и http://blank.jasonwhaley.com/2010/03/automated-deployment-with-cargo-drive.html

Чтобы ответить на вопрос № 2, нет ничего плохого в том, чтобы изменить файл / etc / hosts для имитации производства. Просто есть быстрый скрипт, который позволяет вам добавлять / удалять эти записи и очищает ваш DNS-кеш. Я делаю именно это все время. (убедитесь, что ваш браузер часто очищает свой кеш также через соответствующие настройки).

Чтобы ответить на вопрос № 3) да, именно так вы и должны поступать. Каждая сборка должна приводить к одному развертываемому артефакту, который можно развернуть в любой среде за один шаг. Вам необходимо убедиться, что вы можете сделать это без вашей IDE, и использовать IDE только в качестве инструмента, который поможет вам на этапе разработки.

2 голосов
/ 13 мая 2010

Вам не нужно восстанавливать файл war, если ваш проект представляет собой Dynamic Web App в Eclipse и правильно настроен сервер Tomcat. Следуйте инструкциям ниже:

1) Посмотрите ниже, как настроить сервер Tomcat с помощью eclipse: http://greatwebguy.com/programming/eclipse/make-eclipse-and-tomcat-play-nice-together/

2) Используйте относительные пути для вашего приложения, но не абсолютные.

3) Если вы правильно выполнили 2 шага, у вас будет наилучшая среда для разработки.

2 голосов
/ 13 мая 2010

Другие уже ответили вам, я просто прокомментирую это (это слишком долго для комментария, поэтому я делаю это ответ):

Каждый раз, когда я хочу что-то изменить в разработке, как одна линия в HTML-файл, я должен восстановить весь проект, а затем ждать кот, чтобы загрузить войну, прежде чем я могу посмотрим, если это то, что я хотел.

Если вы измените одну строку в HTML-файле, нет необходимости перестраивать весь проект.

Обратите внимание, что я всегда перестраиваю полную .war и заново развертываю мою .war , но это занимает менее двух секунд (менее одной секунды, чтобы разархивировать .war [это действительно файл .war, заархивированный файл] и менее одной секунды для его повторного развертывания), потому что:

  • вам не нужно перекомпилировать весь ваш проект, когда вы просто измените одну строку в HTML-файле

То же самое, когда вы меняете один .java файл: вы можете просто перекомпилировать этот файл и начать заново.

Я написал свой собственный файл сборки Ant с нуля (здесь нет Maven), и у меня есть несколько целей. Я могу форсировать «чистую сборку», которая перекомпилирует все, но обычно я просто переупаковываю и переворачиваю .war

Вы можете проверить это сами: соберите файл .war, разархивируйте его, скажем, в каталоге dir1 , затем измените один файл .html (или один файл .java / .class) и создайте новый. Война и распакуйте этот новый .war, скажем, dir2 .

Затем сравните dir1 и dir2 : теперь исправьте процесс сборки, чтобы вы могли создать этот второй .war без необходимости перекомпилировать все.

Изменение одного .html, .java, .jsp, .css, .js / любого файла и повторное развертывание нового .war должно занимать считанные секунды (менее двух секунд, если вы не бросили кухонную раковину в свой Webapp).

Обратите внимание, что в том же проекте другой разработчик здесь предпочитает «горячее развертывание» / замену файлов непосредственно в разобранном веб-приложении (я предпочитаю повторно развертывать .war каждый раз, и потому что моя полная переупаковка / повторное развертывание занимает менее двух секунд С этим у меня все в порядке).

1 голос
/ 14 мая 2010

во время разработки вы должны настроить eclipse и tomcat, чтобы не требовалось перестроение / повторное развертывание. просто измените html / css / jsp и т. д., сохраните и обновите браузер, чтобы увидеть результат.

но перед развертыванием на производственной площадке вы должны выполнить полную полную сборку и тщательно протестировать ее.

домены: они должны быть в конфигурационном файле; У dev и prod должны быть разные конфигурационные файлы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...