2012-10-21 13 views
5

Wiele projektów open source, takich jak wiosna składa się z wielu modułów, podczas dodawania tych modułów jako zależności w maven powinienem jawnie zdefiniować każdą zależność lub po prostu pozwolić, aby przejściowe zarządzanie zależnościami wykonało swoje zadanie. Na przykład, który z dwóch przypadków poniżej jest najlepszą praktyką.Kiedy należy wyraźnie zdefiniować zależności przejściowe w maven?

Przypadek 1: Dołącz najwyższe funkcje poziomu, że chcę

<dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>3.1.2.RELEASE</version> 
    </dependency> 

Przypadek 2: Każdą część ram jako wyraźną zależność

<dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>3.1.2.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>3.1.2.RELEASE</version> 
    </dependency> 
      .... other dependencies that are transitively resolved by maven 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>3.1.2.RELEASE</version> 
    </dependency> 

który jest najlepszy ćwiczyć przypadek 1 lub przypadek 2 i dlaczego?

Odpowiedz

3

To zależy od tego, czy deklarujesz jakiekolwiek inne zależności, które używają tych samych zależności (w tym przypadku Spring). Jeśli wszystko czego potrzebujesz, to zależność od najwyższego poziomu, zadeklaruj to. Jeśli używasz innych zależności, które polegają na określonych wersjach zależności przechodnich, zadeklaruj to jako jawną zależność.

Używanie Spring jako przykładu: Jeśli zadeklarujesz spring-webmvc, a następnie zdecydujesz, że potrzebujesz innego pakietu wiosennego, na przykład spring-security, dobrym pomysłem może być jawne zdefiniowanie współdzielonych zależności, na których oba się opierają, abyś wiedział, które wersja jest dołączana do projektu.

Zasadniczo, zadeklaruj wszystko, czego potrzebujesz, aby uzyskać dostęp do konkretnej wersji, i niech specjalista zajmie się resztą, dopóki nie będziesz musiał wykluczyć wersji lub zadeklarować określonych wersji. To właśnie ma zbudować maven, więc pozwól mu zarządzać zależnościami, aż podejmie złą decyzję.

+0

Życzenie, aby wspólne projekty java z otwartym dostępem do kodu źródłowego nie oszalały z powodu włamywania się do zbyt wielu modułów. Wystarczy, że włączysz wszystkie te moduły do ​​swojej aplikacji, ponieważ wszystko i tak ich potrzebuje. – ams

1

myślę nr 1 jest lepszy, ponieważ z oficjalnej docs oczywiste jest, że spring-webmvc zależy na którym wszystkie moduły sprężynowych.

<!-- 
    Spring MVC for Servlet Environments (depends on spring-core, spring-beans, spring-context, spring-web) 
    Define this if you use Spring MVC with a Servlet Container such as Apache Tomcat (org.springframework.web.servlet.*) 
--> 
<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-webmvc</artifactId> 
    <version>${org.springframework.version}</version> 
</dependency> 

Można również spojrzeć na pom, aby zobaczyć, że wszystkie zależności do spring-webmvc zależą od samej wersji jak to jest.

Dlatego nie widzę potrzeby deklarowania ich wyraźnie w twoim pom, przynajmniej w tym przypadku użycia.