J'utilise Maven 3.3.3 avec Java 8 sur Mac Yosemite. J'ai un projet multi-module.
<modules>
<module>first-module</module>
<module>my-module</module>
…
</modules>
Lorsque je construis l'un de mes modules enfants, par exemple, "mon-module" ci-dessus, en utilisant "mvn clean install", la construction tente de télécharger les artefacts du module enfant à partir d'un référentiel distant que j'ai défini dans mon ~ / .m2 Fichier /settings.xml. La sortie est ci-dessous
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building my-module 87.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/maven-metadata.xml
Downloading: http://download.java.net/maven/2/org/mainco/subco/first-module/87.0.0-SNAPSHOT/maven-metadata.xml
Downloaded: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/maven-metadata.xml (788 B at 0.9 KB/sec)
Downloading: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/first-module-87.0.0-20151104.200545-4.pom
Comment forcer Maven à vérifier mon dépôt local ~ / .m2 / avant d'essayer de télécharger à partir des dépôts distants? Voici où j'ai mes dépôts distants définis dans mon fichier ~ / .m2 / settings.xml…
<profile>
<id>releases</id>
<activation>
<property>
<name>!releases.off</name>
</property>
</activation>
<repositories>
<repository>
<id>releases</id>
<url>https://my.remoterepository.com/nexus/content/repositories/releases/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</profile>
<profile>
<id>snapshots</id>
<activation>
<property>
<name>!snapshots.off</name>
</property>
</activation>
<repositories>
<repository>
<id>snapshots</id>
<url>https://my.remoterepository.com/nexus/content/repositories/snapshots/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>
Edit: En réponse à la réponse disant que le téléchargement se produit lorsque l'artefact n'est pas là, voici la sortie du terminal dans laquelle je prouve que le fichier était là dans mon dépôt mais Maven essaie de le télécharger quand même ...
Daves-MacBook-Pro-2:my-module davea$ ls -al ~/.m2/repository/org/mainco/subco/first-module/87.0.0-SNAPSHOT/first-module-87.0.0-SNAPSHOT.jar
-rw-r--r-- 1 davea staff 10171 Nov 5 10:22 /Users/davea/.m2/repository/org/mainco/subco/first-module/87.0.0-SNAPSHOT/first-module-87.0.0-SNAPSHOT.jar
Daves-MacBook-Pro-2:my-module davea$ mvn clean install
[INFO] Scanning for projects...
[WARNING]
[WARNING] Some problems were encountered while building the effective model for org.mainco.subco:my-module:jar:87.0.0-SNAPSHOT
[WARNING] 'build.plugins.plugin.(groupId:artifactId)' must be unique but found duplicate declaration of plugin org.apache.maven.plugins:maven-antrun-plugin @ org.mainco.subco:my-module:[unknown-version], /Users/davea/Documents/sb_workspace/my-module/pom.xml, line 678, column 12
[WARNING]
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING]
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING]
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building my-module 87.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/maven-metadata.xml
Downloading: http://download.java.net/maven/2/org/mainco/subco/first-module/87.0.0-SNAPSHOT/maven-metadata.xml
Downloaded: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/maven-metadata.xml (788 B at 0.8 KB/sec)
Downloading: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/first-module-87.0.0-20151106.043202-8.pom
Downloaded: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/first- module-87.0.0-20151106.043202-8.pom (3 KB at 21.9 KB/sec)
Downloading: http://download.java.net/maven/2/org/mainco/subco/subco/87.0.0-SNAPSHOT/maven-metadata.xml
Downloading: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/subco/87.0.0-SNAPSHOT/maven-metadata.xml
settings.xml
(voir ici ).Réponses:
La dépendance a une version d'instantané. Pour les instantanés, Maven vérifiera le référentiel local et si l'artefact trouvé dans le référentiel local est trop ancien, il tentera d'en trouver un mis à jour dans les référentiels distants. C'est probablement ce que vous voyez.
Notez que ce comportement est contrôlé par la
updatePolicy
directive dans la configuration du référentiel (qui estdaily
par défaut pour les référentiels d'instantanés).la source
Utilisation
mvn --help
et vous pouvez voir la liste des options.Il existe une option comme
-nsu,--no-snapshot-updates Suppress SNAPSHOT updates
Donc, utilisez la commande
mvn install -nsu
peut forcer la compilation avec le référentiel local.la source
-o
pour le comportement maven "hors ligne"Pour vraiment forcer maven à n'utiliser votre repo local, vous pouvez courir avec . Le dit à maven de vous laisser travailler «hors ligne», et il restera hors du réseau.
mvn <goals> -o
-o
la source
mvn dependency:go-offline
Dans mon cas, j'avais un projet multi-modules comme vous. J'ai dû changer un identifiant de groupe de l'une des bibliothèques externes dont dépendait mon projet, comme indiqué ci-dessous.
De:
À:
Faites attention à la section <groupId>. Il s'est avéré que j'oubliais de modifier la section correspondante des sous-modules qui définissent cette dépendance dans leurs fichiers pom.
Cela m'a rendu très fou car le module était disponible localement.
la source
Suivez les étapes ci-dessous:
Par exemple, des fichiers comme .repositories, .pom, .sha1, .lastUpdated etc.
mvn clean install -o
commandeCela aidera à utiliser les fichiers jar du référentiel local plutôt que de se connecter à un référentiel.
la source
*.repositories
et les*.sha1
fichiers ont fonctionné pour moiL'option -o n'a pas fonctionné pour moi car l'artefact est toujours en développement et pas encore téléchargé et maven (3.5.x) essaie toujours de le télécharger à partir du référentiel distant car c'est la première fois, selon l'erreur que j'obtiens.
Cependant, cela a résolu le problème pour moi: https://maven.apache.org/general.html#importing-jars
Après cette installation manuelle, il n'est pas non plus nécessaire d'utiliser l'option hors ligne.
METTRE À JOUR
Je viens de reconstruire la dépendance et j'ai dû la réimporter: le régulier
mvn clean install
ne me suffisait pasla source
Maven vérifie toujours votre référentiel local en premier, cependant, votre dépendance doit être installée dans votre référentiel pour que maven la trouve.
Exécutez
mvn install
d'abord votre module de dépendance, puis créez votre module dépendant.la source