Файловая структура веб-приложения Java / Spring - PullRequest
0 голосов
/ 17 марта 2012

Я только начал изучать Spring (и Java) и собираю приложение, состоящее из нескольких частей.То, что я хотел бы, это некоторые мнения о том, как структурировать приложение с точки зрения внутри IDE и при развертывании.Для справки я использую Intellij 11 с Tomcat 7.

Мое приложение состоит из следующих частей:

  • Основной общедоступный веб-сайт (www.myapp.com)
  • Служба REST(www.myapp.com/rest)
  • Веб-сайт администратора (admin.myapp.com)
  • Ресурсы пользовательского интерфейса (cdn.myapp.com)

Мне нужнодля совместного использования классов Java между всеми этими приложениями (мой сервисный уровень), а также с проблемой совместного использования ресурсов пользовательского интерфейса (css, js, images) между основным веб-сайтом и сайтом администратора.

Как мне лучше всегоВы хотите организовать их в моей IDE и в Tomcat?

Пока что я думаю, что каждое из упомянутых приложений будет отдельным файлом WAR (им не нужно обмениваться сеансами).Я бы создал свой сервисный слой в виде JAR, который мог бы использоваться любым приложением.Как бы вы представили это в intellij или Eclipse?

Я предполагаю, что мои ресурсы пользовательского интерфейса на cdn.myapp.com могут быть просто включены, как обычно, и снова эти ресурсы пользовательского интерфейса будут просто упакованы как еще одна WAR.Это звучит нормально?

Как вы организуете свои проекты с помощью нескольких подпрограмм, подобных этой?

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

Спасибо,

Джеймс.

Ответы [ 2 ]

2 голосов
/ 17 марта 2012

Я хотел бы использовать такой инструмент сборки, как maven , Gradle или Buildr .Все они используют стандартную структуру каталогов и поддерживают подмодули .

Используя подмодули, вы можете, например, создать два "военных модуля" и поместить общийресурсы в общем банке.

/root <- Root project, contains configuration that is shared accross all sub-modules
/root/sharedResources (jar) <- Contains the things you need to share between applications
/root/admin (war) <- admin site, has a dependency on sharedResources.jar
/root/mainSite (war) <- main site, has a dependecy on sharedResources.jar

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

IntelliJ имеет поддержку первого класса для maven (не уверен насчет buildr и gradle), поэтому вы просто указываете IDE на root-pom.xml, и он автоматически создает правильную конфигурацию для вас.

Посмотрите на github, например, cucumber-jvm , чтобы найти примеры настройки родительских / подчиненных модулей в данном инструменте сборки.

1 голос
/ 17 марта 2012

Существуют два способа организации ваших проектов.С любым решением я бы согласился с вашим подходом разделить компоненты на 4 разных файла WAR, а также с рекомендацией ebaxt использовать в дополнение к IDE инструмент сборки, такой как ant или gradle.Прокси-сервер, такой как Apache или nginx, также поможет с вашими именами субдоменов.

Предполагаемое решение будет моим предпочтительным подходом: один набор проектов поддерживает общие ресурсы, такие как изображения, и также отвечает за создание уровня обслуживания.Файлы jar, созданные этими проектами, могут быть включены в другие ваши проекты.Каждый компонент приложения (общедоступный сайт, служба REST, администратор, ресурсы) будет иметь свой собственный проект, который создаст файл war для развертывания на tomcat.В этом решении вы можете настроить IDE таким образом, чтобы последние 4 проекта включали / зависели от общих проектов.В Eclipse это делается путем настройки пути сборки.

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

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