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 № 1Staram 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>