J'utilise un référentiel local comme décrit dans Maven: ajouter une dépendance à un pot par chemin relatif .
L'URL du référentiel est définie dans la partie supérieure pom.xml
as
<url>file:${basedir}/../3rdParty/maven-repository</url>
En outre, le plus haut pom.xml
définit 2 modules
<modules>
<module>sub1</module>
<module>sub2</module>
</modules>
Le problème est que si un module (disons sub1
) définit une dépendance qui doit être téléchargée à partir du référentiel, et maven est appelé à partir du répertoire le plus haut, le ${basedir}
n'est pas défini sur ce répertoire, mais sur sub1
, entraînant une URL de référentiel incorrecte.
Alors, disons que le projet avec le plus haut pom.xml
Réside dans
/Development/myproject/pom.xml
Et le référentiel est en
/Development/3rdParty/maven-repository
Ensuite, l'URL du référentiel doit être définie sur
/Development/myproject/../3rdParty/maven-repository
mais il s'avère qu'il est réglé sur
/Development/myproject/sub1/../3rdParty/maven-repository
qui bien sûr n'existe pas.
Une idée pourquoi c'est le cas?
Bien que cela soit ennuyeux dans votre cas, c'est bien connu et intentionnel. Un projet maven ne doit connaître que son répertoire d'exécution, quel que soit le contexte dans lequel il est exécuté.
J'ai posé presque la même question: variable Maven pour la racine du réacteur plus tôt, et la seule réponse qui avait du sens était pour utiliser ${user.dir}
, bien que ce soit hacky et ne fonctionnera pas si vous construisez à partir d'un répertoire de modules.
(Il existe également cette solution très détaillée: propriété Maven2 qui indique le répertoire parent )
Que diriez-vous d'avoir plusieurs référentiels?
<repositories>
<repository>
<id>ibm-jars-bundle-lv0</id>
<url>file://${basedir}/ibm-jars-bundle/repo</url>
</repository>
<repository>
<id>ibm-jars-bundle-lv1</id>
<url>file://${basedir}/../ibm-jars-bundle/repo</url>
</repository>
<repository>
<id>ibm-jars-bundle-lv2</id>
<url>file://${basedir}/../../ibm-jars-bundle/repo</url>
</repository>
</repositories>
J'ai déjà posé une question similaire concernant le répertoire du projet parent.
Vous pouvez voir le fil ici: propriété Maven2 qui indique le répertoire parent