Le 12/02/2013 23:00, Benjamin POUSSIN a écrit :
On Tue, 12 Feb 2013 11:45:38 +0100
Eric Chatellier <chatellier@codelutin.com> wrote:

Par exemple, dans le module web, la classe :
nc.ird.cantharella.web.pages.SandboxPage
compile explicitement en utilisant des imports hibernate :
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Restrictions;

Il semble y avoir une bonne pratique maven qui stipule que les dépendances
nécessaires
à la compilation doivent être explicitement déclarée dans le pom en scope compile.
Il y a d'ailleurs un plugin maven qui sert a détecter ce genre d'erreur
http://maven.apache.org/plugins/maven-dependency-plugin/usage.html#The_dependency:analyze_mojo

C'est une mauvaise pratique de compiler sur une dépendance transitive car si la
librairie
qui l'a tire est mise à jour et ne la tire plus, cela causera une erreur de
compilation.

Là encore, si les dépendances sont maitrisées, cela ne me parait pas gênant
de ne pas le faire. D'autant plus qu'hibernate serait une dépendance transitive
du module "cantharella.data" et le jour où il ne la tirera plus n'est pas prêt
d'arriver.
Je ne suis pas vraiment d'accord :).

Si dans le code on a un import explicite d'une librairie, il faut
l'avoir en dépendance dans le pom.xml

Si cela nous dérange de l'avoir en dépendance (ex: mais pourquoi avoir
du hibernate dans la couche presentation ?). Pour moi cela veut dire que
le projet est mal découpé. On ne devrait pas avoir d'import hibernate
dans le module présentation et donc pas besoin de la dépendance.

Il ne faut pas caché un mauvais découpage en module ou un manque de
méthode métier dans un module, en masquant une dépendance dans le
pom.xml en s'appuyant sur les dépendances transitive pour cela.

Donc pour moi, soit on en a besoin et on met la dépendance
soit on en veut pas, et il faut refactoré le code pour supprimer la
dépendance

Je comptais effectivement utiliser dependency:analyse pour m'assurer que seules les librairies utilisées directement apparaissent pour chaque module (sans oublier celle utilisées au runtime).
Je vous tiens au courant dès que j'ai terminé ce nettoyage. J'enlèverai les dépendances qui n'ont pas lieu d'être car initialement le projet était bien découpée.

Adrien

--
Adrien Cheype
Ingénieur en Systèmes d'Information
Service « Informatique Scientifique et Appui aux Partenaires du Sud »
Direction du Système d'Information (DSI)
http://www.ird.fr/dsi/
http://www.ird.fr/informatique-scientifique/

INSTITUT DE RECHERCHE POUR LE DEVELOPPEMENT
BP A5 - 98848 Nouméa - Nouvelle Calédonie
Tél. +687 260 789