Question

Je googlé cela et il semble que personne n'a une réponse, mais il semble comme une chose élémentaire qu'il devrait être possible.

J'ai la structure du projet suivant:

parent
   ---sub-project1
   ---sub-project2

sous-projet2 a besoin d'avoir des sous-project1 comme une dépendance.

J'ai donc cela dans le pom de sous-Projet2:

 <dependencies>
    <dependency>
         <artifactId>sub-project1</artifactId>
        <groupId>mygroup</groupId>
        <version>1.0-SNAPSHOT</version>
    </dependency>

....

Quand je fais cela, Maven essaie de télécharger le fichier sous-project1.jar, qui n'existe pas parce qu'il est pas prêt pour le repo encore.

J'ai essayé de mettre un <scope>import</scope> dans la dépendance, mais cela ne fonctionne pas non plus. - même résultat

Alors, que dois-je faire pour obtenir Maven regarder sous-project1 lors de la construction sous-Projet2?

EDIT Voici quelques extraits de pom:

Parent:

<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>
   <prerequisites>
      <maven>2.0.9</maven>
   </prerequisites>
   <modules>
    <module>sub-project1</module>
    <module>sub-project2</module>
   </modules>
 ....

sous-project1:

<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/xsd/maven-4.0.0.xsd">
  <parent>
    <artifactId>parent</artifactId>
    <groupId>mygroup</groupId>
    <version>1.0-SNAPSHOT</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>

  <artifactId>sub-project1</artifactId>
....

sous-Projet2:

<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/xsd/maven-4.0.0.xsd">
  <parent>
    <artifactId>parent</artifactId>
    <groupId>mygroup</groupId>
    <version>1.0-SNAPSHOT</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>

   <artifactId>sub-project1</artifactId>

    <dependencies>
     ....
       <dependency>
          <artifactId>sub-project2</artifactId>
          <groupId>mygroup</groupId>
          <version>1.0-SNAPSHOT</version>
          <scope>import</scope>
      </dependency>
  </dependencies>

L'erreur que je reçois quand je suis arrivé mvn clean install sur le parent est:

[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Compilation failure

Avec beaucoup de classes / paquet ne trouve pas d'erreurs

Était-ce utile?

La solution

Vous devriez avoir une pom maître au niveau des parents, dans lequel vous la liste des modules de votre projet.

  <modules>
    <module>sub-project1</module>
    <module>sub-project2</module>>
  </modules>

Dans chaque sous-projet, vous devez faire référence à votre parent:

<parent>
    <artifactId>parent</artifactId>
    <groupId>mygroup</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>

Et vous spécifiez les dépendances entre le projet comme vous l'avez fait. Je pense que vous avez manqué quelques-unes des étapes que je viens de décrire.

Edit:. Vous devez donner votre mvn clean install au niveau parent

Autres conseils

  

Quand je fais cela, Maven essaie de télécharger le fichier sous-project1.jar, qui n'existe pas parce qu'il est pas prêt pour le repo encore.

C'est le comportement normal, Maven résout les dépendances à travers le référentiel local, vous devez install sous-project1 premier. En fait, la façon courante de traiter ce genre de situation est de lancer une construction du réacteur (une construction multi-modules) du parent.

En supposant que vous l'agrégation des modules dans le parent à savoir que vous avez quelque chose comme ceci a déclaré dans le pom.xml « parent »:

<modules>
  <module>sub-project1</module>
  <module>sub-project2</module>>
</modules>

Juste cd dans le répertoire parent et lancer une construction du réacteur:

$ cd parent
$ mvn install

Maven puis calculer l'ordre de génération (déduite à partir du graphe orienté en modules et leurs dépendances) et exécuter install sur tous les modules dans l'ordre calculé (parent premier , puis sous-project1 et enfin sous-projet2 pour votre exemple particulier).

Mais ne pas utiliser le champ d'un de type import, vous abusez ici. Retirez-le.

Mise à jour: La question a été mis à jour pendant que je répondais et les POMs montrées ne pas illustrent la situation dans la question initiale (dépendance inversée, erreur probable dans l'ID d'artefact). Mais l'approche proposée est toujours valable. Retirer le <scope>import</scope> sur la dépendance et commencer une construction de réacteur à partir du parent.

scroll top