<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to component-structure</title><link>https://sourceforge.net/p/javaenterpriseplatform/wiki/component-structure/</link><description>Recent changes to component-structure</description><atom:link href="https://sourceforge.net/p/javaenterpriseplatform/wiki/component-structure/feed" rel="self"/><language>en</language><lastBuildDate>Tue, 31 Dec 2019 08:20:33 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/javaenterpriseplatform/wiki/component-structure/feed" rel="self" type="application/rss+xml"/><item><title>component-structure modified by Romanov</title><link>https://sourceforge.net/p/javaenterpriseplatform/wiki/component-structure/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v5
+++ v6
@@ -1,4 +1,4 @@
-# Структура проектов 2.0
+# Компонентная структура прикладных проектов
 *Внедрение сервисов REST API в приложения выявило необходимость пересмотра структуры проектов (на уровне дерева файлов и папок).
 Статья знакомит читателя с новой структурой проектов приложений и описывает основные шаги перевода проекта со старой, gwt-центричной структуры на новую, обеспечивающую независимость компонентов приложений.*

&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Romanov</dc:creator><pubDate>Tue, 31 Dec 2019 08:20:33 -0000</pubDate><guid>https://sourceforge.net65d59c1619def3bc2fa97091a50b57a3c40ff08b</guid></item><item><title>component-structure modified by Romanov</title><link>https://sourceforge.net/p/javaenterpriseplatform/wiki/component-structure/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Romanov</dc:creator><pubDate>Tue, 31 Dec 2019 08:20:05 -0000</pubDate><guid>https://sourceforge.net202fd07fe3397b4abe544060a7a22162ea0991cf</guid></item><item><title>Структура проектов 2.0_test modified by Romanov</title><link>https://sourceforge.net/p/javaenterpriseplatform/wiki/%25D0%25A1%25D1%2582%25D1%2580%25D1%2583%25D0%25BA%25D1%2582%25D1%2583%25D1%2580%25D0%25B0%2520%25D0%25BF%25D1%2580%25D0%25BE%25D0%25B5%25D0%25BA%25D1%2582%25D0%25BE%25D0%25B2%25202.0_test/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Romanov</dc:creator><pubDate>Tue, 31 Dec 2019 08:19:28 -0000</pubDate><guid>https://sourceforge.netad7f6f42ccd100e30e4414188e6a3086969fa62b</guid></item><item><title>Структура проектов 2.0 modified by Romanov</title><link>https://sourceforge.net/p/javaenterpriseplatform/wiki/%25D0%25A1%25D1%2582%25D1%2580%25D1%2583%25D0%25BA%25D1%2582%25D1%2583%25D1%2580%25D0%25B0%2520%25D0%25BF%25D1%2580%25D0%25BE%25D0%25B5%25D0%25BA%25D1%2582%25D0%25BE%25D0%25B2%25202.0/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Romanov</dc:creator><pubDate>Thu, 24 Oct 2019 16:07:14 -0000</pubDate><guid>https://sourceforge.netd52de8e73ecf490eb24160d7b2be230672c87bea</guid></item><item><title>ps modified by Romanov</title><link>https://sourceforge.net/p/javaenterpriseplatform/wiki/ps/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Romanov</dc:creator><pubDate>Thu, 24 Oct 2019 16:06:55 -0000</pubDate><guid>https://sourceforge.net6245aa71cc4fdbf168fcdab6de09c6b14794bd58</guid></item><item><title>Структура проектов 2.0 modified by Romanov</title><link>https://sourceforge.net/p/javaenterpriseplatform/wiki/%25D0%25A1%25D1%2582%25D1%2580%25D1%2583%25D0%25BA%25D1%2582%25D1%2583%25D1%2580%25D0%25B0%2520%25D0%25BF%25D1%2580%25D0%25BE%25D0%25B5%25D0%25BA%25D1%2582%25D0%25BE%25D0%25B2%25202.0/</link><description>&lt;div class="markdown_content"&gt;&lt;h1 id="20"&gt;Структура проектов 2.0&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Внедрение сервисов REST API в приложения выявило необходимость пересмотра структуры проектов (на уровне дерева файлов и папок).&lt;br/&gt;
Статья знакомит читателя с новой структурой проектов приложений и описывает основные шаги перевода проекта со старой, gwt-центричной структуры на новую, обеспечивающую независимость компонентов приложений.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="_1"&gt;Общая структура&lt;/h2&gt;
&lt;p&gt;Папка &lt;code&gt;App&lt;/code&gt; является корневой для разработки клиент-серверного приложения.&lt;/p&gt;
&lt;p&gt;Приложение может иметь несколько &lt;em&gt;независимых друг от друга&lt;/em&gt; реализаций клиентов и сервисов (&lt;strong&gt;сервисом&lt;/strong&gt; здесь называется серверная часть приложения, бэкенд). Каждая реализация клиента или сервиса находится в отдельной папке, название которой начинается с соответствующего префикса&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;App&lt;/span&gt;
    &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
    &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
    &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
    &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
    &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
    &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Каждая реализация клиента или сервиса называется &lt;strong&gt;компонентом&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;В совершенстве, разные компоненты независимы друг от друга: они могут быть построены на разных языках программирования и разных технологиях, и сборка каждого компонента происходит отдельно. Также каждый компонент имеет свой &lt;strong&gt;продукт&lt;/strong&gt; (war, ear, javascript bundle), и продукты разных компонентов могут быть установлены на разных серверах и использоваться в разных окружениях.&lt;br/&gt;
Для идентификации компонентов на уровне структуры папок достаточно использовать наиболее лаконичный постфикс, однозначно идентифицирующий конкретный компонент и отличающий его от других&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;App&lt;/span&gt;
    &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;react&lt;/span&gt;           &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="err"&gt;клиент&lt;/span&gt; &lt;span class="err"&gt;на&lt;/span&gt; &lt;span class="n"&gt;React&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;JS&lt;/span&gt;
    &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;gwt&lt;/span&gt;             &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="err"&gt;клиент&lt;/span&gt; &lt;span class="err"&gt;на&lt;/span&gt; &lt;span class="n"&gt;GWT&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Java&lt;/span&gt;
    &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;gwt&lt;/span&gt;            &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="err"&gt;сервис&lt;/span&gt; &lt;span class="err"&gt;на&lt;/span&gt; &lt;span class="n"&gt;GWT&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Java&lt;/span&gt;
    &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;rest&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;jersey&lt;/span&gt;    &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="err"&gt;сервис&lt;/span&gt; &lt;span class="err"&gt;на&lt;/span&gt; &lt;span class="n"&gt;Rest&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Jersey&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Java&lt;/span&gt;
    &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;rest&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;spring&lt;/span&gt;    &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="err"&gt;сервис&lt;/span&gt; &lt;span class="err"&gt;на&lt;/span&gt; &lt;span class="n"&gt;Rest&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Spring&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Java&lt;/span&gt;
    &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;php&lt;/span&gt;            &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="err"&gt;сервис&lt;/span&gt; &lt;span class="err"&gt;на&lt;/span&gt; &lt;span class="n"&gt;Soap&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;PHP&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;В случае, если у нескольких компонентов имеется общий код, следует выделять его в отдельный компонент, если возникают неоднозначности&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;App&lt;/span&gt;
    &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;java&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;core&lt;/span&gt;          &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="err"&gt;бизнес&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="err"&gt;логика&lt;/span&gt; &lt;span class="err"&gt;сервиса&lt;/span&gt; &lt;span class="err"&gt;на&lt;/span&gt; &lt;span class="n"&gt;java&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;общая&lt;/span&gt; &lt;span class="err"&gt;для&lt;/span&gt; &lt;span class="err"&gt;нескольких&lt;/span&gt; &lt;span class="err"&gt;других&lt;/span&gt; &lt;span class="err"&gt;компонент&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;java&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;rest&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;jersey&lt;/span&gt;   &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="err"&gt;сервис&lt;/span&gt; &lt;span class="err"&gt;на&lt;/span&gt; &lt;span class="n"&gt;Rest&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Jersey&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Java&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="err"&gt;построенный&lt;/span&gt; &lt;span class="err"&gt;на&lt;/span&gt; &lt;span class="err"&gt;общем&lt;/span&gt; &lt;span class="err"&gt;компоненте&lt;/span&gt; &lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;java&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;core&lt;/span&gt;
    &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;java&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;rest&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;spring&lt;/span&gt;   &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="err"&gt;сервис&lt;/span&gt; &lt;span class="err"&gt;на&lt;/span&gt; &lt;span class="n"&gt;Rest&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Spring&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Java&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="err"&gt;построенный&lt;/span&gt; &lt;span class="err"&gt;на&lt;/span&gt; &lt;span class="err"&gt;общем&lt;/span&gt; &lt;span class="err"&gt;компоненте&lt;/span&gt; &lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;java&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;core&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Однако такое архитектурное решение влечёт с неизбежностью взаимозависимости между компонентами, поэтому следует применять его только если это оправдано (например, при наличии объёмной прослойки общего кода бизнес-логики).&lt;/p&gt;
&lt;p&gt;В действительности и в обозримом будущем для большинства приложений планируются только следующие компоненты:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;App&lt;/span&gt;
    &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;react&lt;/span&gt;           &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="err"&gt;клиент&lt;/span&gt; &lt;span class="err"&gt;на&lt;/span&gt; &lt;span class="n"&gt;React&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;JS&lt;/span&gt;
    &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;gwt&lt;/span&gt;                    &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="err"&gt;клиент&lt;/span&gt; &lt;span class="err"&gt;и&lt;/span&gt; &lt;span class="err"&gt;сервис&lt;/span&gt; &lt;span class="err"&gt;на&lt;/span&gt; &lt;span class="n"&gt;GWT&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Java&lt;/span&gt;
    &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;rest&lt;/span&gt;           &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="err"&gt;сервис&lt;/span&gt; &lt;span class="err"&gt;на&lt;/span&gt; &lt;span class="n"&gt;Rest&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Jersey&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Java&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Здесь компонент &lt;code&gt;/gwt&lt;/code&gt; совмещает в себе клиентский и серверный код GWT (традиционно), при этом сохраняется историческое разделение клиентского и серверного кода на уровне java-пакетов&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;App&lt;/span&gt;
    &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;react&lt;/span&gt;
    &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;gwt&lt;/span&gt;
        &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;java&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;technology&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;jep&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;jepriashowcase&lt;/span&gt;
            &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;         &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="err"&gt;клиент&lt;/span&gt; &lt;span class="err"&gt;на&lt;/span&gt; &lt;span class="n"&gt;GWT&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Java&lt;/span&gt;
            &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt;         &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="err"&gt;сервис&lt;/span&gt; &lt;span class="err"&gt;на&lt;/span&gt; &lt;span class="n"&gt;GWT&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Java&lt;/span&gt;
            &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;shared&lt;/span&gt;         &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="err"&gt;общая&lt;/span&gt; &lt;span class="err"&gt;клиент&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="err"&gt;сервисная&lt;/span&gt; &lt;span class="err"&gt;часть&lt;/span&gt; &lt;span class="err"&gt;на&lt;/span&gt; &lt;span class="n"&gt;GWT&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Java&lt;/span&gt;
    &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;rest&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h4 id="_2"&gt;Структура отдельных компонентов&lt;/h4&gt;
&lt;p&gt;Внутри папки каждого компонента соблюдается структура, адекватная конкретной технологии. &lt;br/&gt;
Для gwt-компонента принимается без изменений историческая структура проекта, для компонента &lt;code&gt;service-rest&lt;/code&gt; -- структура Maven-стандартная&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;App&lt;/span&gt;
    &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;gwt&lt;/span&gt;                    &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="err"&gt;историческая&lt;/span&gt; &lt;span class="err"&gt;структура&lt;/span&gt;
        &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;
            &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;java&lt;/span&gt;
            &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;html&lt;/span&gt;
            &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;resources&lt;/span&gt;
        &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;
        &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;lib&lt;/span&gt;
        &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;

    &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;rest&lt;/span&gt;           &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="err"&gt;структура&lt;/span&gt; &lt;span class="err"&gt;проекта&lt;/span&gt; &lt;span class="n"&gt;Maven&lt;/span&gt;
        &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;
            &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;
                &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;java&lt;/span&gt;
                &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;webapp&lt;/span&gt;
            &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;
                &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;java&lt;/span&gt;
        &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;target&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h2 id="_3"&gt;Сборка приложения&lt;/h2&gt;
&lt;p&gt;Каждый компонент имеет свой сценарий сборки (для поддержания независимости компонентов). Результатом сборки является продукт, располагающийся внутри папки компонента&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;App&lt;/span&gt;
    &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;react&lt;/span&gt;
        &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;build&lt;/span&gt;
            &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;jepriashowcase&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bundle&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;js&lt;/span&gt;           &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="err"&gt;продукт&lt;/span&gt;
        &lt;span class="n"&gt;package&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;                            &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="err"&gt;сценарий&lt;/span&gt; &lt;span class="err"&gt;сборки&lt;/span&gt;
    &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;rest&lt;/span&gt;
        &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;target&lt;/span&gt;
            &lt;span class="n"&gt;jepriashowcase&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;rest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;war&lt;/span&gt;     &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="err"&gt;продукт&lt;/span&gt;
        &lt;span class="n"&gt;pom&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xml&lt;/span&gt;                                 &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="err"&gt;сценарий&lt;/span&gt; &lt;span class="err"&gt;сборки&lt;/span&gt;
    &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;gwt&lt;/span&gt;        
        &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;lib&lt;/span&gt;
            &lt;span class="n"&gt;jepriashowcase&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;gwt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;war&lt;/span&gt;              &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="err"&gt;продукт&lt;/span&gt;
        &lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xml&lt;/span&gt;                               &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="err"&gt;сценарий&lt;/span&gt; &lt;span class="err"&gt;сборки&lt;/span&gt;      
&lt;/pre&gt;&lt;/div&gt;


&lt;h3 id="gwt-"&gt;Поддержка обратной совместимости со старым gwt-продуктом&lt;/h3&gt;
&lt;p&gt;Исторически администрирование приложений на серверах велось посредством единых &lt;code&gt;war&lt;/code&gt; файлов (содержащих и клиентскую, и сервисную части). Для поддержания этого механизма помимо сборки каждого продукта в отдельности, производится &lt;em&gt;общая сборка&lt;/em&gt; проекта, суть которого -- упаковать необходимые продукты отдельных компонентов в общий продукт.&lt;br/&gt;
Файлы и ресурсы, необходимые для общей сборки, лежат в корне проекта&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;App&lt;/span&gt;
    &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;react&lt;/span&gt;
        &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;build&lt;/span&gt;
            &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;jepriashowcase&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bundle&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;js&lt;/span&gt;           &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="err"&gt;продукт&lt;/span&gt;
        &lt;span class="n"&gt;package&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;                       &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="err"&gt;сценарии&lt;/span&gt; &lt;span class="err"&gt;сборки&lt;/span&gt;
    &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;rest&lt;/span&gt;
        &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;target&lt;/span&gt;
            &lt;span class="n"&gt;jepriashowcase&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;rest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;war&lt;/span&gt;     &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="err"&gt;продукт&lt;/span&gt;
        &lt;span class="n"&gt;pom&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xml&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;                            &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="err"&gt;сценарии&lt;/span&gt; &lt;span class="err"&gt;сборки&lt;/span&gt;
    &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;gwt&lt;/span&gt;        
        &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;lib&lt;/span&gt;
            &lt;span class="n"&gt;JepRiaShowcase&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;gwt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;war&lt;/span&gt;              &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="err"&gt;продукт&lt;/span&gt;
        &lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xml&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;                          &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="err"&gt;сценарии&lt;/span&gt; &lt;span class="err"&gt;сборки&lt;/span&gt;

    &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;lib&lt;/span&gt;                                        &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="err"&gt;папка&lt;/span&gt; &lt;span class="err"&gt;общего&lt;/span&gt; &lt;span class="err"&gt;продукта&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;для&lt;/span&gt; &lt;span class="err"&gt;обратной&lt;/span&gt; &lt;span class="err"&gt;совместимости&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;JepRiaShowcase&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;war&lt;/span&gt;                      &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="err"&gt;общий&lt;/span&gt; &lt;span class="err"&gt;продукт&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="err"&gt;совмещающий&lt;/span&gt; &lt;span class="err"&gt;отдельные&lt;/span&gt; &lt;span class="err"&gt;продукты&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;имеет&lt;/span&gt; &lt;span class="err"&gt;исторически&lt;/span&gt; &lt;span class="err"&gt;сложившееся&lt;/span&gt; &lt;span class="err"&gt;имя&lt;/span&gt; &lt;span class="err"&gt;и&lt;/span&gt; &lt;span class="err"&gt;расположение&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;webapp&lt;/span&gt;
        &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;WEB&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;INF&lt;/span&gt;
            &lt;span class="n"&gt;web&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xml&lt;/span&gt;                             &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="n"&gt;web&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xml&lt;/span&gt; &lt;span class="err"&gt;для&lt;/span&gt; &lt;span class="err"&gt;общего&lt;/span&gt; &lt;span class="err"&gt;продукта&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;является&lt;/span&gt; &lt;span class="err"&gt;ручным&lt;/span&gt; &lt;span class="err"&gt;объединением&lt;/span&gt; &lt;span class="n"&gt;web&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xml&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="err"&gt;файлов&lt;/span&gt; &lt;span class="err"&gt;разных&lt;/span&gt; &lt;span class="err"&gt;компонентов&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xml&lt;/span&gt;                                   &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="err"&gt;сценарий&lt;/span&gt; &lt;span class="err"&gt;сборки&lt;/span&gt; &lt;span class="err"&gt;общего&lt;/span&gt; &lt;span class="err"&gt;продукта&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;поддерживает&lt;/span&gt; &lt;span class="err"&gt;исторические&lt;/span&gt; &lt;span class="err"&gt;команды&lt;/span&gt; &lt;span class="err"&gt;администрирования&lt;/span&gt; &lt;span class="err"&gt;приложения&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;dependency&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;properties&lt;/span&gt;                       &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="err"&gt;пропертисы&lt;/span&gt; &lt;span class="err"&gt;для&lt;/span&gt; &lt;span class="err"&gt;сборки&lt;/span&gt; &lt;span class="err"&gt;общего&lt;/span&gt; &lt;span class="err"&gt;продукта&lt;/span&gt;
    &lt;span class="n"&gt;deploy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;properties&lt;/span&gt;                           &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="err"&gt;пропертисы&lt;/span&gt; &lt;span class="err"&gt;для&lt;/span&gt; &lt;span class="err"&gt;сборки&lt;/span&gt; &lt;span class="err"&gt;общего&lt;/span&gt; &lt;span class="err"&gt;продукта&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Администрирование единого &lt;code&gt;war&lt;/code&gt; файла обеспечивает одновременное администрирование совмещённых в нём продуктов разных компонентов и создаёт единую точку входа в приложение через веб (по старому стилю).&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Romanov</dc:creator><pubDate>Thu, 24 Oct 2019 16:06:09 -0000</pubDate><guid>https://sourceforge.net59a7329babaf3aeec93d411086e9c9d31b5f4234</guid></item></channel></rss>