7
votes

Maven: Comment éliminer les dépendances s'ils sont déjà transitifs?

Par exemple, s'il existe des dépendances: xxx pré>

Je veux supprimer la dépendance a -> c code>, car il y a A -> B -> C code>. P>

Je sais qu'il peut y avoir de fortes dépendances qui ne devraient pas être réduites, mais ce n'est pas pertinent pour cette question. P>

Exemple: P>

In a.pom: 
<dependencies>
    <dependency>b</dependency>
</dependencies>


2 commentaires

Et puis votre construction se casse si b change et ne dépend plus de c. Pourquoi voulez-vous cacher cette dépendance, si c'est en fait là?


@THOMAS Il n'est pas pertinent pour cette question.


3 Réponses :


2
votes

Comme d'autres affiches, je ne suis pas vraiment sûr de ce que vous voulez réaliser. Peut-être que des exclusions sont ce dont vous avez besoin? Vous pouvez utiliser des exclusions pour supprimer des dépendances de vos dépendances - si elles ne sont pas souhaitées pour certaines raisons.

        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.1</version>
            <exclusions>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>logkit</groupId>
                    <artifactId>logkit</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>avalon-framework</groupId>
                    <artifactId>avalon-framework</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>javax.servlet</groupId>
                    <artifactId>servlet-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>


0 commentaires

14
votes

Utiliser dépendance MVN: analysez pour vous montrer s'il ya des dépendances dans votre POM que vous n'avez pas besoin (cela peut également identifier certains que vous avez manqué, ajoutez -DOutPutXML = true pour afficher les entrées manquantes).

Utiliser dépendance MVN: arborescence Pour vous montrer les dépendances actuellement utilisées par votre projet et où Maven les trouve. Ajouter -dverbose = true pour afficher tous les duplicats et les conflits.

Si a directement dépend de C (si le code dans a mentionne les classes dans C ), alors le POM devrait le refléter. Si a ne dépend que directement sur B , vous pouvez supprimer en toute sécurité la dépendance C de A 'S POM. fichier XML. Les commandes ci-dessus doivent vous permettre de déterminer quelle est la prochaine action suivante appropriée.

edit: d'accord, vous avez mis à jour votre question. Voici comment vous le faites:

  1. dans le projet A , exécuté dépendance MVN: arborescence -dverbose = true . Cela vous montrera un arbre complet de toutes les dépendances considérées par Maven pour votre projet.
  2. Regardez la sortie de l'étape 1 et faites une liste de toutes les dépendances montrées à plus d'un niveau de profondeur (certaines d'entre elles seront probablement des duplicats).
  3. Modifiez votre fichier pom.xml dans n'importe quel éditeur que vous aimez et supprimez toutes les dépendances correspondant à la liste que vous avez créée à l'étape 2.

    ou cherchez-vous un moyen de le faire automatiquement? Je ne pense pas qu'il y ait une manière automatisée à moins que vous n'écrivez un vous-même, car ce que vous essayez de faire est une mauvaise idée . Vous dites aux gens que leurs objections sont "non pertinentes" à votre question, mais le fait est que votre question est comme demander "Comment puis-je utiliser Maven pour rendre cela plus difficile à utiliser Maven?"

    Il n'y a pas de bonne raison pour laquelle vous voudriez faire cela. Si vous pensez qu'il y a une bonne raison, vous devez essayer de le faire pour produire un certain résultat. Vous devriez demander de l'aide avec le résultat souhaité, car votre plan est mauvais.


1 commentaires

Notez que vous devez exécuter mvn installer avant dépendance: analyser car l'analyse est effectuée sur l'artefact compilé



13
votes

Je suppose que vous voulez trouver les dépendances parasites / inutiles déjà satisfaites parce que vous les obtenez gratuitement d'une autre dépendance.

Je peux imaginer que vous voudrez peut-être le faire afin de nettoyer vos POM.

Cependant, ce n'est normalement pas quelque chose que vous voudriez faire, car c'est une bonne pratique pour énoncer explicitement quelles sont vos dépendances.

Vous ne savez jamais si dans le futur module B supprime c comme dépendance et brise donc a


1 commentaires

Vous avez raison. Je dois nettoyer les PMS, les dépendances ne sont pas si bien déclarées parce que les programmeurs ne connaissent pas très bien les outils Maven et le génie logiciel. Les dépendances sont principalement gérées par IDES. Il est également utile de générer un graphique de dépendance minimisé à des fins d'illustration.