Comment configurer une dépendance Maven sans sous-projet de déployer des pots?
-
24-09-2019 - |
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
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.