/ / Projekt wielomodułowy. Składają się z: modułu macierzystego i submodułów: klienta, współdzielonego, serwera. Jak? - java, kompilacja

Projekt wielomodułowy. Składa się z: modułu nadrzędnego i submodułów: klient, współdzielony, serwer. Jak? - java, kompilacja

Chciałbym mieć multimodułowy projekt aplikacji internetowej. Jest parent moduł, który zawiera 3 submoduły:

client, shared, server.

Chciałbym to zbudować z mavenem.

chciałbym client mógł uzyskać dostęp: server i shared kod modułów.

chciałbym shared mógł uzyskać dostęp: server kod modułów.

Zależności, które osiągnęłam

client -> shared -> server
client -> server

Czy można go zbudować z mavenem?

Oto moje aktualne poms:

rodzic:

<modules>
<module>server</module>
<module>shared</module>
<module>client</module>
</modules>

klient:

<dependencies>
<dependency>
<groupId>pl.derp</groupId>
<artifactId>shared</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>pl.derp</groupId>
<artifactId>server</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>

współdzielone nie mają zależności

serwer:

<dependencies>
<dependency>
<groupId>pl.derp</groupId>
<artifactId>shared</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>

Edytować

Chciałbym mieć mój shared moduł miał dostęp do server kod modułu, ale gdy dodam zależności server moduł wewnątrz shared moduł, otrzymuję błąd dotyczący zależności cyklu i nie mogę zbudować projektu. Moje pytanie brzmi: jak przygotować poms we wszystkich submodułach, aby to osiągnąć? Jak widzisz shared moduł nie ma teraz żadnych zależności.

Odpowiedzi:

0 dla odpowiedzi № 1

Staram się upraszczać życie i mieć tylko dwa moduły (dla modelu, serwerów proxy i kodu klienta).

na przykład

model (maven project)
webclient (maven project)
shared (package)
server (package)
client (package)

Nie jestem całkowicie pewien, czy możesz to zrobić z trzema modułami ze względu na wzajemne zależności.

FWIW mamy moduły do ​​bazy danych, modelu i klienta (gwt web client), ponieważ dzieli główne obawy i utrzymuje rozsądne zależności.


0 dla odpowiedzi nr 2

Wolny od kontekstu maven jest cyklicznyproblem zależności w twojej architekturze. Żadne dwa moduły nie mogą się od siebie zależeć, ponieważ w takim przypadku nie można ich zbudować. To, co możesz zrobić, to utworzyć inny moduł, który może mieć nazwę „prawdziwy-współdzielony moduł”, a od tego zależą zarówno moduły współdzielone, jak i moduły serwerowe lub naprawdę zmieniasz układ Twój wspólny moduł tak, aby nie zależał od żadnego innego modułu i innych modułów.


0 dla odpowiedzi № 3

Jak wiem zależności są przechodnie

Więc:

klient:

<dependencies>
<dependency>
<groupId>pl.derp</groupId>
<artifactId>server</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>

serwer:

<dependencies>
<dependency>
<groupId>pl.derp</groupId>
<artifactId>shared</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>