web-dev-qa-db-fra.com

maven ne parvient pas à résoudre la dépendance

J'ai un projet maven multi module.Lorsque j'essaie de construire un site, par ex. exécuter maven site sur le projet parent, il ne parvient pas à résoudre la dépendance à l'un des modules. Mais si je compile juste (mvn clean compile sur le projet parent) ou exécutez des tests (mvn clean test sur le projet parent) il n'y a pas de problème de dépendance.

Qu'est-ce qui pourrait provoquer un tel comportement?

UPD

Version Maven

Apache Maven 3.0.2 (r1056850; 2011-01-09 02:58:10+0200)
Java version: 1.6.0_26, vendor: Sun Microsystems Inc.
Java home: c:\Program Files\Java\jdk1.6.0_26\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 7", version: "6.1", Arch: "AMD64", family: "windows"

version maven-site-plugin

[DEBUG]   Included: org.Apache.maven.plugins:maven-site-plugin:jar:2.0.1

Message d'erreur

[ERROR] Failed to execute goal on project myproj-client: Could not resolve dependencies for project mycompany.myproj:myproj-client:jar:0.0.1-SNAPSHOT: Could not find artifact mycompany.myproj:myproj-common:jar:0.0.1-SNAPSHOT -> [Help 1]
org.Apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal on project myproj-client: Could not resolve dependencies for project mycompany.myproj:myproj-client:jar:0.0.1-SNAPSHOT: Could not find artifact mycompany.myproj:myproj-common:jar:0.0.1-SNAPSHOT
    at org.Apache.maven.lifecycle.internal.LifecycleDependencyResolver.getDependencies(LifecycleDependencyResolver.Java:190)
    at org.Apache.maven.lifecycle.internal.LifecycleDependencyResolver.resolveProjectDependencies(LifecycleDependencyResolver.Java:104)
    at org.Apache.maven.lifecycle.internal.MojoExecutor.ensureDependenciesAreResolved(MojoExecutor.Java:258)
    at org.Apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.Java:201)
    at org.Apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.Java:153)
    at org.Apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.Java:145)
    at org.Apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.Java:84)
    at org.Apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.Java:59)
    at org.Apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.Java:183)
    at org.Apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.Java:161)
    at org.Apache.maven.DefaultMaven.doExecute(DefaultMaven.Java:319)
    at org.Apache.maven.DefaultMaven.execute(DefaultMaven.Java:156)
    at org.Apache.maven.cli.MavenCli.execute(MavenCli.Java:534)
    at org.Apache.maven.cli.MavenCli.doMain(MavenCli.Java:196)
    at org.Apache.maven.cli.MavenCli.main(MavenCli.Java:141)
    at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:39)
    at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:25)
    at Java.lang.reflect.Method.invoke(Method.Java:597)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.Java:290)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.Java:230)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.Java:409)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.Java:352)
Caused by: org.Apache.maven.project.DependencyResolutionException: Could not resolve dependencies for project mycompany.myproj:myproj-client:jar:0.0.1-SNAPSHOT: Could not find artifact mycompany.myproj:myproj-common:jar:0.0.1-SNAPSHOT
    at org.Apache.maven.project.DefaultProjectDependenciesResolver.resolve(DefaultProjectDependenciesResolver.Java:156)
    at org.Apache.maven.lifecycle.internal.LifecycleDependencyResolver.getDependencies(LifecycleDependencyResolver.Java:165)
    ... 22 more
Caused by: org.sonatype.aether.resolution.ArtifactResolutionException: Could not find artifact mycompany.myproj:myproj-common:jar:0.0.1-SNAPSHOT
    at org.sonatype.aether.impl.internal.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.Java:526)
    at org.sonatype.aether.impl.internal.DefaultRepositorySystem.resolveArtifacts(DefaultRepositorySystem.Java:304)
    at org.sonatype.aether.impl.internal.DefaultRepositorySystem.resolveDependencies(DefaultRepositorySystem.Java:334)
    at org.Apache.maven.project.DefaultProjectDependenciesResolver.resolve(DefaultProjectDependenciesResolver.Java:150)
    ... 23 more
Caused by: org.sonatype.aether.transfer.ArtifactNotFoundException: Could not find artifact mycompany.myproj:myproj-common:jar:0.0.1-SNAPSHOT
    at org.sonatype.aether.impl.internal.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.Java:517)
    ... 26 more
[ERROR] 
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.Apache.org/confluence/display/MAVEN/DependencyResolutionException
[ERROR] 
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn <goals> -rf :myproj-client
13
michael nesterenko

J'ai le même problème. Je n'ai pas trop fouillé dans le code source de Maven. Mais voici mon observation.

Supposons que vous n'ayez jamais mvn installmyproj-common dans votre référentiel local, ni déployé sur aucun référentiel distant. Lorsque vous exécutez mvn clean site sur le projet parent, les choses se passent comme ceci:

  1. maven détermine l'ordre de myproj-common est avant myproj-client en fonction de leur relation de dépendance
  2. mvn clean site est exécuté sur myproj-common. Tous les résultats précédents dans myproj-common/target sont supprimés et myproj-common/target/site est généré. (Notez qu'après cette étape, ni les classes compilées ni le fichier jar packé n'existent dans myproj-common/target)
  3. mvn clean site est exécuté sur myproj-client. Maven vérifie d'abord la dépendance de ce projet et essaie de trouver l'artefact (classes ou jar) de myproj-common aux endroits suivants: (a) myproj-common/target (b) référentiel local (3) référentiels distants.
  4. mvn site échoue sur myproj-client, car il ne peut pas trouver l'artefact de myproj-common

Cela explique pourquoi mvn clean compile site et mvn clean package site travaux. Ils auraient tous les deux préparé myproj-common artefacts dans son répertoire cible avant mvn site fonctionne sur myproj-client.

Et mvn install suivi par mvn site fonctionne également.

Une exception spéciale est que si vous mettez quelque chose comme emma-maven-plugin dans les rapports, il compilera et instrumentera automatiquement les classes. Dans ce cas, mvn clean site fonctionne toujours.

Je ne sais pas pourquoi Maven essaie de trouver le pot de myproj-common à l'étape 3, il semble que cela n'a rien à voir avec mvn site. L'exception se produit assez tôt dans le noyau maven, avant d'entrer dans maven-site-plugin. Cela ne ressemble pas à un problème de maven-site-plugin mais à un comportement commun à tous les cycles de vie de maven (sauf clean je crois).

12
Achi Chen

je faisais face à la même chose mais pour les struts et les dépendances Paypal_base, j'ai corrigé en faisant ce qui suit.

  1. j'ai vérifié et constaté que les fichiers JAR n'existaient pas dans le dossier approprié du référentiel Maven (.m2/référentiel ....).
  2. J'ai installé ces fichiers jar via la commande mvn suivante

    mvn install: install-file -Dfile = C:\Dependencies\Paypal_base.jar\-DgroupId = Paypal -DartifactId = Paypal_base -Dversion = 0.1\-Dpackaging = jar

et

mvn install:install-file -Dfile=C:\Dependencies\struts.jar \
  -DgroupId=struts -DartifactId=struts -Dversion=0.1 \
  -Dpackaging=jar

(-DFile est l'emplacement du fichier jar dans votre système)

  1. Reconstruisez le projet par Maven.
  2. Mon projet a été construit avec succès.

vous devez vérifier le pot et utiliser l'instruction ci-dessus si le pot n'existe pas. cela peut être utile.

4
Garun Kumar Mishra

Cela pourrait être un problème avec le plugin de site n'ayant pas accès au réacteur, et donc ne voyant pas que l'artefact du projet est disponible dans vos sources de projet. (Il s'agit simplement d'une hypothèse, peut-être étayée par MSITE-302 .)

Essayez d'exécuter en premier mvn install, qui installe vos artefacts dans le référentiel local, puis exécute mvn site.

Pour plus d'informations sur le réacteur, essayez:

3
Emil Sit

Hé, pour une raison quelconque, après avoir apporté des modifications aux fichiers de module et de pom parent, le problème a disparu. Je ne sais pas exactement ce qui a été fait, mais actuellement mvn site sur le projet parent fonctionne normalement. Malheureusement, je n'ai pas le temps d'enquêter sur les racines du problème. Mais il semble que le passage à la version 3.0 du site m'a mis sur la bonne voie. J'ai également pu exécuter le site (avant qu'il ne soit corrigé) de la manière suivante mvn compile site, dans ce cas, il pourrait trouver une dépendance.

1
michael nesterenko

Il semble que maven recherche myproj-common: jar: 0.0.1-SNAPSHOT dans le référentiel.

La raison de l'échec pourrait être: maven n'est pas en mesure d'accéder aux artefacts de cliché dans le référentiel.

Pour activer les artefacts d'instantané:

veuillez vérifier votre pom.xml pour la balise snapshots dans la section référentiel.

<repository>
   <name>xyz</name>
   <id>repoid</id>
   <url>http://x.y.z</url>
   <releases>
       <enabled>true</enabled>
   </releases>
   <snapshots>
       <enabled>true</enabled>
   </snapshots>
</repository>
0
Karthik