2013-03-13 10 views
45

Istnieją dwa niezależne projekty (myWarProject i MyEjbProject). Więc kiedy buduję myWarProject muszę zainstalować MyEjbProject w lokalnym repozytorium, więc mogę zdefiniować w myWarProject jako zależność i pomyślnie spakować myWarProject.Jak dodać projekt jako zależność innego projektu?

Czy istnieje sposób radzenia sobie z tym bez konieczności instalowania osobnego MyEjbProject, a także bez definiowania jako modułów nadrzędnych.

Wiem, że można to osiągnąć poprzez budowę mrówki, ale zastanawiam się, czy istnieje sposób radzenia sobie z mavenem?

Możemy utworzyć projekt nadrzędny za pomocą "pom" i przenieść pozostałe dwa w ramach projektu nadrzędnego. Niestety nie mogę tego zrobić, ponieważ obecnie mamy już te dwa oddzielne projekty w CVS, których nie mogę zmienić. Jeśli mogę sobie z tym poradzić poprzez plik pom, to właśnie szukam.

+0

Hi Simon, dzięki za szybką odpowiedź. W rzeczywistości MyEjbProject jest kolejnym projektem maven, który muszę zbudować, gdy buduję myWarProject. Czy istnieje sposób zdefiniowania pom w MyWarProject MyEjbProject? – kds

+0

Proszę mi powiedzieć: w jaki sposób od siebie zależą? Obecnie wygląda na to, że projekt wojenny zależy od ejb na zbudowanie kompletnej aplikacji internetowej. W tym przypadku oba projekty nie byłyby jednak tak niezależne. –

+0

Edytowałem swoją odpowiedź (dodałem coś na końcu) Mam nadzieję, że będzie to bliżej twojego pytania. –

Odpowiedz

35

Zakładając MyEjbProject nie jest kolejnym Maven Projekt jesteś właścicielem lub chcą budować z Maven, można użyć zależności systemowe do podłączenia się do istniejącego pliku jar projektu jak tak

<project> 
    ... 
    <dependencies> 
     <dependency> 
     <groupId>yourgroup</groupId> 
     <artifactId>myejbproject</artifactId> 
     <version>2.0</version> 
     <scope>system</scope> 
     <systemPath>path/to/myejbproject.jar</systemPath> 
     </dependency> 
    </dependencies> 
    ... 
</project> 

stwierdzili, że jest to zwykle lepszy (i preferowany sposób), aby zainstalować pakiet w repozytorium, czyniąc go projektem maven i budując go lub instalując tak, jak już to robisz.

EDYCJA: Jeśli są one jednak zależne od siebie, zawsze można utworzyć oddzielny projekt nadrzędny (musi to być projekt "pom"), uznając dwa pozostałe projekty za "moduły". (Projekty dzieci nie będą musiały zadeklarować trzeciego projektu jako swojego rodzica). W konsekwencji można dostać nowy katalog dla nowego projektu macierzystego, gdzie można by też całkiem prawdopodobnie umieścić dwa niezależne projekty tak:

parent 
|- pom.xml 
|- MyEJBProject 
| `- pom.xml 
`- MyWarProject 
    `- pom.xml 

Projekt rodzic dostanie sekcję „moduły” do nazwy wszystkie moduły potomne. Agregatora byłoby wtedy użyć zależności w modułach dzieci rzeczywiście dowiedzieć się w jakiej kolejności projekty mają być zbudowane)

<project> 
    ... 
    <artifactId>myparentproject</artifactId> 
    <groupId>...</groupId> 
    <version>...</version> 

    <packaging>pom</packaging> 
    ... 
    <modules> 
    <module>MyEJBModule</module> 
    <module>MyWarModule</module> 
    </modules> 
    ... 
</project> 

ten sposób projekty mogą odnosić się do siebie, ale (po ich zainstalowaniu w lokalnym repozytorium) nadal być stosowane niezależnie jako artefakty w innych projektach

EDIT2:

Wreszcie, jeśli projekty nie są w powiązanych katalogach, można spróbować dać je jako względne modułów:

filesystem 
|- mywarproject 
| `pom.xml 
|- myejbproject 
| `pom.xml 
`- parent 
    `pom.xml 

teraz można po prostu zrobić (pracował w Maven 2, właśnie próbowałem):

<!--parent--> 
<project> 
    <modules> 
    <module>../mywarproject</module> 
    <module>../myejbproject</module> 
    </modules> 
</project> 
+0

Cześć Simon, tak, jak powiedziałeś, możemy stworzyć projekt nadrzędny z "pom" i przenieść pozostałe dwa w ramach projektu nadrzędnego. Niestety nie mogę tego zrobić, ponieważ obecnie mamy już te dwa oddzielne projekty w CVS, których nie mogę zmienić. Jeśli mogę sobie z tym poradzić poprzez plik pom, to właśnie szukam. – kds

+0

Możesz edytować swoje pytanie, dodając te dodatkowe informacje w swoim komentarzu: może to wyjaśnić Twój problem innym, którzy próbują odpowiedzieć! –

+0

W ostateczności, jeśli nic innego nie pomaga: skoro są już rozdzielone, czy nie możesz po prostu sprawdzić ich z CVS w odpowiednim podkatalogu w lokalnym systemie plików? Sprawdź MyEJBProject w katalogu "parent/myejbproject" i sprawdź MyWarProject w "parent/mywarproject". Prawdopodobnie jest to koszmar utrzymania, choć ... –