2011-10-14 23 views
10

Tengo un proyecto de varios módulos maven. Cuando intento crear un sitio, p. Ejecute maven site en el proyecto principal. No puede resolver la dependencia a uno de los módulos. Pero si acabo de compilar (mvn clean compile en el proyecto principal) o ejecutar pruebas (mvn clean test en el proyecto principal) no hay problemas de dependencia.maven no puede resolver la dependencia

¿Qué podría causar tal comportamiento?

UPD

versión 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" 

versión maven-plugin sitio

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

mensaje de error

[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 
+0

¿qué versión de maven y qué versión de plugin de sitio? – jtahlborn

+0

@jtahlborn, pregunta actualizada con la versión de maven. No hay complementos de sitios definidos explícitamente en archivos pom. –

+0

si ejecuta mvn con el argumento -X, escupirá resmas de información. eso debería permitirle determinar la versión de las diversas bibliotecas que está utilizando. – jtahlborn

Respuesta

-2

Del Apache website:

sitio: el sitio se utiliza para generar un sitio para un solo proyecto. Tenga en cuenta que los enlaces entre sitios de módulos en una compilación de varios módulos no funcionarán.

+0

, lo confunde lo que eso significa. eso significa que si carga la página del submódulo generado en un navegador web, los enlaces entre módulos se romperán. necesita organizar o implementar el sitio para colocarlo en la estructura correcta para que los enlaces funcionen correctamente. – jtahlborn

+0

@jtahlborn, pero ahora el problema no está en los enlaces, es con las dependencias :( –

+0

@mishanesterenko - sí, entiendo lo que estás preguntando, estaba respondiendo a esta respuesta, lo cual es incorrecto. – jtahlborn

0

Parece que maven está buscando myproj-common: jar: 0.0.1-SNAPSHOT en el repositorio.

El motivo de la falla podría ser: maven no puede acceder a los artefactos de instantánea en el repositorio.

Para activar artefactos de instantánea:

compruebe que pom.xml para instantáneas de la etiqueta en la sección repositorio.

<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

el OP indicó que la compilación normal funciona bien, entonces dudo que ese sea el problema. – jtahlborn

3

Esto podría ser un problema con el sitio plugin no tener acceso al reactor, y por lo tanto no viendo que el artefacto proyecto está disponible en sus fuentes del proyecto. (Esto es meramente una hipótesis, quizás respaldada por MSITE-302.)

Intente ejecutar primero mvn install, que instala sus artefactos en el repositorio local, y luego ejecuta mvn site.

Para obtener más información sobre el reactor, prueba:

+0

¿Es necesario ejecutar la instalación de cada subproyecto? – gfan

1

Je, por alguna razón, después de hacer algunos cambios al módulo y los archivos del pom de los padres, el problema desapareció . No sé exactamente qué se hizo, pero actualmente el mvn site en el proyecto principal está funcionando normalmente. Desafortunadamente no tengo tiempo para investigar cuáles son las raíces del problema. Pero parece que cambiar la versión del sitio a 3.0 me puso en el camino correcto. También podría ejecutar el sitio (antes de que se arregló) de la siguiente manera mvn compile site, en este caso podría encontrar la dependencia.

+0

Así es la sabiduría de Maven – Totoro

13

Tengo el mismo problema.No profundicé demasiado en el código fuente de Maven. Pero aquí está mi observación.

Suponiendo que nunca mvn installmyproj-common en su repositorio local, ni lo desplegó en ningún repositorio remoto. Cuando se ejecuta mvn clean site en el proyecto principal, las cosas suceden así:

  1. experto determina el orden de miproyecto-común es antes miproyecto-cliente de acuerdo con su relación de dependencia
  2. mvn clean site se ejecuta en myproj-common. Todos los resultados anteriores en myproj-common/target se eliminan y myproj-common/target/site es generado. (Tenga en cuenta que después de este paso, ni clases compiladas ni existe tarro de empaquetado en miproyecto-common/target)
  3. mvn clean site se ejecuta en miproyecto-cliente. comprueba primero Maven la dependencia de este proyecto, y trata de encontrar MyProj-común 's artefacto (clases o frasco) en estos lugares: (a) miproyecto-common/Target (b) repositorio local (3) repositorios remotos.
  4. mvn site falla en miproyecto-cliente, ya que no puede encontrar el artefacto de miproyecto-común

Esto explica por qué mvn clean compile site y mvn clean package site obras. Ambos habrían preparado myproj-common artefactos en su directorio de destino antes de que mvn site se ejecute en myproj-client.

Y mvn install seguido de mvn site funciona también.

Una excepción especial es que si pones algo como emma-maven-plugin en el informe, automáticamente compilará e instrumentará las clases. En este caso, mvn clean site siempre funciona.

No estoy seguro de por qué Maven intenta encontrar el jar myproj-common en el paso 3, parece que no tiene nada que ver con mvn site. La excepción ocurre bastante temprano en maven core, antes de entrar en maven-site-plugin. No parece un problema de maven-site-plugin, sino un comportamiento común de todos los ciclos de vida maven (excepto clean Creo).

3

me enfrentaba a lo mismo pero para struts y para las dependencias de paypal_base, lo arreglé haciendo lo siguiente.

  1. comprobé y encontré que los archivos jar no existían en la carpeta apropiada en el repositorio de maven (.m2/reposotory ....).
  2. he instalado que los archivos jar a través siguiente comando mvn

    mvn instalar: instalar archivos -dfile = C: \ Dependencias \ paypal_base.jar \ -DgroupId = paypal -DartifactId = paypal_base -Dversion = 0.1 \ -Dpackaging = frasco

y

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

(-dfile es la ubicación del archivo jar en su sistema)

  1. reconstruir la proyecto de Maven.
  2. Mi proyecto fue una compilación exitosa.

debe comprobar el jar, y utilizar las instrucciones anteriores es jar no existe. puede ser útil.

Cuestiones relacionadas