2010-03-02 11 views
44

Acabo de ver algunos proyectos y necesito construirlos, sin embargo, instalé Maven hace bastante tiempo (¿quizás 6 meses?) Y realmente no lo he usado desde entonces - el pom.xml para el proyecto que tengo no tiene este "http://repo1.maven.org/myurlhere" en cualquier parte que - tiene la url absoluta en el repositorio Maven es para el proyecto, pero experto todavía está tratando de descargar de la experta repo en general:¿Cómo consigo que Maven use los repositorios correctos?

Macintosh:trunk$ mvn clean install 
[INFO] Scanning for projects... 
Downloading: http://repo1.maven.org/url/project/project/x.x/project-x.x.pom 
[INFO] Unable to find resource 'url.project:project:pom:x.x' in repository central (http://repo1.maven.org/) 
[INFO] ------------------------------------------------------------------------ 
[ERROR] FATAL ERROR 
[INFO] ------------------------------------------------------------------------ 
[INFO] Failed to resolve artifact. 

GroupId: url.project 
ArtifactId: project 
Version: x.x 

Reason: Unable to download the artifact from any repository 

    url.project:project:pom:x.x 

from the specified remote repositories: 
    central (http://repo1.maven.org/) 

puede alguien ayudarme con lo que yo' No estoy haciendo lo correcto. Básicamente, solo revisé los proyectos desde la línea de comandos, edité el directorio y ejecuté "mvn clean install", nada más. Cualquier ayuda es muy apreciada.

Respuesta

4

Básicamente, todo lo que Maven le dice es que ciertas dependencias en su proyecto no están disponibles en el repositorio central de maven. Lo predeterminado es buscar en su carpeta .m2 local (repositorio local), y luego en cualquier repositorio configurado en su POM, y luego en el repositorio central de maven. Mira los repositorios section de la referencia Maven.

El problema es que el proyecto que se controló no configuró el POM de forma tal que se pudieran encontrar todas las dependencias y el proyecto podría construirse desde cero.

23

Por defecto, Maven siempre buscará en el repositorio oficial de Maven, que es http://repo1.maven.org.

Cuando Maven intenta construir un proyecto, que se verá en su repositorio local (por defecto ~/.m2/repository pero puede configurar cambiando el valor <localRepository> en su ~/.m2/settings.xml) para encontrar cualquier tipo de dependencia, complemento o informe definido en su pom.xml. Si el artefacto adecuado no se encuentra en su repositorio local, se verá en todos los repositorios externos configurados, comenzando con el predeterminado, http://repo1.maven.org.

Puede configurar Maven para evitar este repositorio predeterminado mediante el establecimiento de un espejo en el archivo de settings.xml:

<mirrors> 
    <mirror> 
     <id>repoMirror</id> 
     <name>Our mirror for Maven repository</name> 
     <url>http://the/server/</url> 
     <mirrorOf>*</mirrorOf> 
    </mirror> 
</mirrors> 

De esta manera, en lugar de ponerse en contacto con http://repo1.maven.org, Maven pondrá en contacto con su repositorio Entreprise (http://the/server en este ejemplo).

Si desea añadir otro repositorio, puede definir una nueva en su archivo settings.xml:

<profiles> 
    <profile> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <repositories> 
      <repository> 
       <id>foo.bar</id> 
       <releases> 
        <enabled>true</enabled> 
       </releases> 
       <snapshots> 
        <enabled>true</enabled> 
       </snapshots> 
       <url>http://new/repository/server</url> 
      </repository> 
     </repositories> 

se puede ver el modelo completo settings.xmlhere.

Con respecto al proceso clean, puede solicitar a Maven que lo ejecute sin conexión. En este caso, Maven no va a tratar de llegar a los repositorios externos:

mvn -o clean 
+1

Maven no resuelve las dependencias durante la limpieza, no hay necesidad de ejecutarlo fuera de línea (al menos no con maven 2.2.1 y el plugin clean 2.2). –

+4

NUNCA use la expresión comodín "*" cuando defina réplicas o no podrá crear herramientas de terceros proveedores o ejemplos de proyectos que definan repositorios personalizados dentro de sus poms. – HDave

+0

¿Cuál es el equivalente a definir y sobrescribir esto en mi proyecto pom.xml? – powder366

53

el pom.xml para el proyecto que tengo no tiene esta "http://repo1.maven.org/myurlhere" en cualquier lugar en que

Todos los proyectos tienen http://repo1.maven.org/ declarado como <repository> (y <pluginRepository>) de forma predeterminada.Este repositorio, que se llama el central del repositorio, se hereda como otras configuraciones predeterminadas del "Super POM" (todos los proyectos heredan del Super POM). Entonces, un POM es en realidad una combinación del Super POM, cualquier POM padre y el POM actual. Esta combinación se denomina "POM efectivo" y se puede imprimir utilizando el objetivo effective-pom del plugin Maven Help (útil para la depuración).

Y de hecho, si ejecuta:

mvn help:effective-pom 

Vas a ver al menos lo siguiente:

<repositories> 
    <repository> 
     <snapshots> 
     <enabled>false</enabled> 
     </snapshots> 
     <id>central</id> 
     <name>Maven Repository Switchboard</name> 
     <url>http://repo1.maven.org/maven2</url> 
    </repository> 
    </repositories> 
    <pluginRepositories> 
    <pluginRepository> 
     <releases> 
     <updatePolicy>never</updatePolicy> 
     </releases> 
     <snapshots> 
     <enabled>false</enabled> 
     </snapshots> 
     <id>central</id> 
     <name>Maven Plugin Repository</name> 
     <url>http://repo1.maven.org/maven2</url> 
    </pluginRepository> 
    </pluginRepositories> 

que tiene la URL absoluta en el repositorio Maven es para el proyecto, pero maven todavía está tratando de descargar desde el general maven repo

Maven intentará encontrar depe ndencies en todos los repositorios declarados, incluido en el central, que está allí por defecto como vimos. Pero, de acuerdo con la traza que están mostrando, es suficiente con uno repositorio definido (el repositorio central) o experto imprimiría algo como esto:

Reason: Unable to download the artifact from any repository 

    url.project:project:pom:x.x 

from the specified remote repositories: 
    central (http://repo1.maven.org/), 
    another-repository (http://another/repository) 

Así que, básicamente, Maven es incapaz de encontrar el url.project:project:pom:x.x porque no está disponible en central

Pero sin saber qué proyecto ha retirado (tiene tal vez instrucciones específicas) o qué dependencia falta (puede encontrarse en otro repositorio), es imposible ayudarlo más.

+0

para ver exactamente dónde se comprueba mientras se ejecuta, ejecute 'mvn -U dependency: resolve' -' -U' obliga a mvn a volver a intentar, de lo contrario guarda el error como metadata – Adam

Cuestiones relacionadas