0

Je cloné le dépôt git du projet Artemis Apache ActiveMQ (https://github.com/apache/activemq-artemis) puis dactylographiéMise en place maven pour compiler (au lieu de le téléchargement) de dépendance

mvn -Ptests test -pl :integration-tests 

J'ai été surpris de voir des messages de journal comme le

suivant
... 
Downloading: http://repository.apache.org/snapshots/org/apache/activemq/artemis-selector/1.4.0-SNAPSHOT/artemis-selector-1.4.0-20160625.030221-11.jar 
Downloading: http://repository.apache.org/snapshots/org/apache/activemq/artemis-core-client/1.4.0-SNAPSHOT/artemis-core-client-1.4.0-20160625.030211-11.jar 
... 

Depuis par exemple artemis-core-client est contenu dans le dépôt git que j'ai cloné au début, je m'attendais à ce que maven le construise à partir de là. De cette façon, lorsque je fais des changements dans la source du client principal, ils sont détectés par les tests d'intégration. À la place, maven télécharge le fichier jar à partir du référentiel.

Question: Comment configurer maven pour toujours construire tous les modules qui se trouvent dans le dépôt git et télécharger uniquement les dépendances "vrai", ce que je veux dire les choses qui ne sont pas dans le dépôt git?

+2

Essentiellement, il est le même que cette question: http://stackoverflow.com/questions/33131880/maven-multi-module-project-can-not-find-sibling-module Vous devez lancer Maven depuis le projet racine et non directement dans un module. C'est parce que les dépendances n'ont pas été installées, donc Maven essaie de les télécharger. – Tunaki

+0

@Tunaki Donc, le "-pl: integration-tests" est ce qui provoque le téléchargement de maven, au lieu de compiler. Droite? Parce que je cours mvn dans le répertoire où est le projet principal .pom. – user7610

+0

Non, il n'y a pas de module d'intégration-tests dans le projet principal, vérifiez ma réponse. Vous exécutez maven sur le projet test/main, pas sur le projet library/main. –

Répondre

1

Vous n'exécutez pas la construction Maven sur le projet principal, sur le pom.xml principal qui définit en effet les modules artemis-selector et artemis-core-client, entre autres.

Vous exécutez la version Maven sur le tests et son pom.xml, où seuls les modules de test sont définis. C'est un projet side/test, qui a comme parent le fichier pom précédent, mais qui ne joue aucun rôle dans la définition de ses modules parents. Par conséquent, les dépendances ne sont pas résolues en tant que modules mais en tant que dépendances Maven.

Vous devez d'abord installer (via mvn clean install) l'ancien projet, afin que les bibliothèques soient disponibles dans votre cache Maven local (donc aucun téléchargement ne soit déclenché), puis exécutez le projet tests.


Vérifiez la official doc pour un héritage vs différence d'agrégation pour préciser davantage.

de la pile de débordement, les fils de suivi pourraient également être intéressantes:

+0

"Vous devez d'abord installer (via mvn clean install) l'ancien projet," Cela semble un peu sujet aux erreurs, car il est très facile d'exécuter les tests sur un ensemble de pots différent de celui que je voulais tester. Est-ce le meilleur que l'on puisse faire avec Maven, ou le projet pourrait-il être mieux configuré? Je vais poser une nouvelle question si vous pensez que c'est nécessaire. – user7610

+0

@JiriDanek c'est la stratégie choisie pour le projet je dirais, probablement pour réduire le nombre de modules ou faire des tests d'intégrations sur un projet principal différent pour la séparation des préoccupations (pas de tests d'intégration sur les modules, code de progression?). En tant que stratégie différente, l'ensemble du projet parallèle des tests aurait pu être un profil du projet principal, en ajoutant ses modules à l'ensemble de la construction. Cependant, d'après un commentaire du pom, on dirait que toute la construction principale pourrait déjà prendre plus de 2 heures, donc probablement que cela a également joué un rôle dans ce choix. –

+0

@JiriDanek Si cela vous a aidé, veuillez considérer [accepter] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) la réponse pour que la question ne soit pas apparaît comme sans réponse globale. Merci. –