8
votes

Quelle est la meilleure façon de résoudre les dépendances entre les projets Java?

Je pense que la plupart d'entre vous sauront, les programmeurs réutilisent souvent du code d'autres logiciels. Je pense que la plupart du temps c'est une bonne idée. Mais si vous utilisez le code d'un autre projet, votre programme dépend de l'autre projet.

i mon cas actuel, j'ai eu trois projets Java A, B et C. Maintenant une utilisation B et B utilise C. J'utilise Eclipse IDE et ajouté B à la buildpath de A et C à la buildpath de B. Il y a une erreur de compilateur qui ne peut pas résoudre quelque chose de C. Donc, je dois ajouter C à la buildpath de b.

Alors, quel est le meilleur moyen, pour résoudre les dépendances tout en gardant votre programme aussi indépendant que possible des autres projets?

J'aimerais savoir est en général et en référence à ma situation actuelle. Y a-t-il de meilleurs moyens de faire cela? C'est à dire. Il existe des paramètres de classe de classe dans la vue de configuration de lancement / débogage, mais je pense qu'ils ne vont pas aider à compiler l'heure.

Merci d'avance.


1 commentaires

Je ne sais pas pourquoi c'était voté à la fois et sans commentaire à cela. C'est une question valable, si quelque peu à gauche de Newbie-ISH. Mauvaise forme.


8 Réponses :


7
votes

Cela ressemble à une partie du problème fixé par Maven. En utilisant Maven et Eclipse, à savoir M2eclipse, vous pouvez avoir des projets utiliser d'autres projets et toute la résolution de dépendance est manipulée pour vous.


3 commentaires

De plus, si vous utilisez Intellij Idea, l'intégration maven intégrée est fantastique.


Nous utilisons Maven pour un grand projet. Je l'aime une fois que cela est configuré et fonctionne correctement, mais la documentation est faible dans de nombreux endroits et peut avoir une courbe d'apprentissage escarpée. Soyez conscient de ces problèmes avant de se lancer dans cette voie.


Si vous voulez en savoir plus sur Maven, il y a un livre électronique gratuit de sonatype ici: Sonatype.com/support/ Livres



2
votes

Il me semble que vous faites ce que vous devez sans intégrer un outil de gestion de dépendance comme Ivy ou Maven, qui vous fournit la capacité de «gestion de la dépendance transitienne». Avec l'un de ces outils, vous pouvez simplement préciser que cela dépend de B et B dépend de C et ils sauront automatiquement que A a besoin de C aussi.

Les avantages de Maven (c'est ce que j'ai d'expérience dans) entre en jeu quand il est temps d'emballer vos projets de déploiement car il peut facilement collecter toutes ces dépendances (tout en bas de la hiérarchie) et les placer ensemble dans un dossier de distribution ou un bocal gras contenant toutes vos dépendances. Il faut du temps de lecture et de configuration pour entrer dans un outil tel que Maven, mais il fait de la tâche de gérer vos dépendances beaucoup plus facilement, d'autant plus qu'elles grandissent.


0 commentaires

0
votes

La gestion de la dépendance est un énorme sujet. Maven, Ivy et d'autres outils ont été développés pour atténuer la douleur avec un certain succès. Ces deux outils créent une hiérarchie de dépendance afin que vous ne rencontriez pas dans la situation que vous avez décrite. Ils ont également des plug-ins Eclipse afin que Eclipse reconnaisse cette hiérarchie.

Pour utiliser vraiment ces cadres, vous devrez modifier votre processus de construction actuel. Maven nécessite probablement plus d'engagement que de lierre, mais ni trivial, et comprendre comment le configurer prend du temps. Cela dit, il est très utile d'avoir vos dépendances définies et gérées clairement.


0 commentaires

1
votes

Nous utilisons Maven et c'est essentiel pour nos projets. C'est un bon moment pour que vous appreniez - les dépendances sur plus de 3 projets peuvent être effrayantes. Offres mavennes avec des versions de sorte que si, pour une raison quelconque, vous devez dépendre de FOO.1.2.3, alors Maven garantira que vous n'obtenez pas la mauvaise version.

Cependant, ce n'est pas trivial. Si vous utilisez NetBeans, il est intégré mieux que Eclipse et peut vous aider à apprendre. (Les projets également sont assez activés entre les deux systèmes).

Maven prend en charge beaucoup de concept dans son fichier POM (POM.XML), y compris des informations de licence, des contributeurs, des arguments, etc. Vous obtenez donc beaucoup plus qu'une simple gestion de dépendance. Et il soutient la modularisation des projets.

Ne sautez pas la courbe d'apprentissage - vous devez savoir comment cela fonctionne. Mais vous trouverez également des questions précédentes pour aider


0 commentaires

1
votes

D'autres ont mentionné plusieurs des bons outils, Maven est probablement le plus courant. Ivy est un autre qui est plus ciblé de la gestion de la dépendance. J'utilise personnellement la gradle qui présente une partie des meilleures de toutes ces caractéristiques sous une enveloppe groovy familière ... qui est toujours en évolution et documentée spoytionnellement. ;)

Une chose à prendre conscience est la façon dont ces outils gèrent des dépendances transitives. Dans votre exemple, c est une dépendance transitive d'A parce que cela dépend de B qui dépend de C. Certains de ces outils de construction traiteront de manière différente ce type de dépendance et cela peut vous surprendre lorsque vous vous y attendez le moins.

Par exemple, si A fait réellement référence au code de C, c'est-à-dire: il a une dépendance temporelle de compilation sur C, puis votre configuration A-> B-> C fonctionnera dans quelque chose comme Maven. À l'autre bout, la gradle vous fera également déclarer que cela dépend de c ... car cela fait. Les dépendances d'exécution sont complètement résolues de toute façon.

La surprise vient lorsque vous avez été transitoire de quelque chose pendant des mois et que certains de votre code reposent sur des aspects de C et vous décidez que vous n'avez plus besoin de dépendance B. Soudain, votre code ne construira pas avant de comprendre que vous avez besoin d'une dépendance A-> C spécifiée. Dans cet exemple, c'est assez trivial à découvrir mais parfois ce n'est pas le cas.

Et si vous parlez comme ça fait que votre tête nager un peu et que vous ne planifiez pas votre projet, obtenez beaucoup plus compliqué ... alors vous pouvez probablement rester avec ce que vous faites pendant un moment. Comme les autres ont mentionné, c'est la bonne façon de le faire sans qu'un outil vous aide.


0 commentaires

1
votes

Utilisez Maven pour gérer vos dépendances, puis utilisez le plugin de dépendance pour voir les dépendances.

vous pouvez exécuter

Dépendance MVN: Analyser

ou

Dépendance MVN: arborescence -dverbose = true

Cela vous aidera beaucoup.


0 commentaires

1
votes

Nul doute que vous devriez utiliser un outil de gestion de dépendance, car les gens ont noté ... manuellement, archives B et C dans B_C.JAR. Tester que la dépendance de B de B sur C est résolue dans le pot.

Ajoutez ensuite b_c.jar dans la classe de classe ...


0 commentaires

0
votes

0 commentaires