web-dev-qa-db-fra.com

Maven ne peut pas résoudre la dépendance d'un module dans le même projet multi-module

Lors de l'exécution de commandes telles que

mvn dependency:build-classpath

ou

mvn exec:Java

Maven est incapable de résoudre une dépendance d'un de mes modules sur un autre.

[ERREUR] Echec de l'exécution de l'objectif sur le projet analyseur-application: Impossible de résoudre les dépendances du projet projet_groupe: A: jar: 0.1-SNAPSHOT: Impossible de trouver l'artefact project_group: B: jar: 0.1-SNAPSHOT.

La structure du projet est la suivante:

/pom.xml
/A/pom.xml
/B/pom.xml

Le parent pom est comme suit:

<project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>project_group</groupId>
  <artifactId>parent</artifactId>
  <packaging>pom</packaging>
  <version>0.1-SNAPSHOT</version>
  <name>parent</name>

  <modules>
    <module>A</module>
    <module>B</module>
  </modules>

Le premier module enfant (celui qui ne résout pas la dépendance):

    <project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>parent_group</groupId>
    <artifactId>parent</artifactId>
    <version>0.1-SNAPSHOT</version>
  </parent>
  <artifactId>A</artifactId>
  <packaging>jar</packaging>
  <name>A</name>

  <dependencies>
    <dependency>
      <groupId>parent_group</groupId>
      <artifactId>B</artifactId>
      <version>0.1-SNAPSHOT</version>
    </dependency>

Le deuxième module enfant (la dépendance):

  <project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>parent_group</groupId>
    <artifactId>parent</artifactId>
    <version>0.1-SNAPSHOT</version>
  </parent>
  <artifactId>B</artifactId>
  <packaging>jar</packaging>
  <name>B</name>
47

Avez-vous couru mvn clean install au moins une fois sur le projet pour installer les dépendances dans votre référentiel local?

49
Andrew McKee

Le réacteur Maven est bizarre de cette façon, il ne conserve les modules que pour certaines tâches. Lorsque vous exécutez une cible de construction qui ne fait que quelque chose pour un sous-projet, même si Maven crée d'abord des dépendances, elle ne les conserve pas dans le réacteur (parfois).

L'installation dans le référentiel local est une solution de contournement, mais elle est horrible et doit être évitée autant que possible, car vous pouvez facilement vous retrouver avec des résultats de génération obsolètes.

Une solution un peu moins laide consiste à combiner deux cibles de construction, la deuxième cible de fabrication faisant quelque chose d'inoffensif, mais déclenchant l'ajout de réacteur dans tous les sous-projets.

Par exemple, vous pouvez combiner la tâche de votre choix avec les tâches 'Compiler' ou 'Package'.

Voir également la réponse la plus votée à l'adresse Maven ne reconnaît pas les modules frères lors de l'exécution de mvn dependency: tree

15
tkruse

Cette erreur peut également être due au fait que Maven est en mode hors connexion.

Parfois, il me semble que le mode hors connexion est activé accidentellement dans IntelliJ IDEA. Pour le désactiver, basculez le Toggle Offline Mode bascule dans la barre d’outils Maven

enter image description here

ou décochez la case Travailler hors ligne dans les paramètres sous Build, Execution, Deployment > Build Tools > Maven.

enter image description here

0
Marv