java - proyecto - maven tutorial pdf
¿Cómo consigo que Maven use los repositorios correctos? (4)
Acabo de revisar algunos proyectos y necesito crearlos, 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 esto " http://repo1.maven.org/myurlhere "en cualquier parte de él: tiene la URL absoluta donde está el repositorio de maven para el proyecto, pero aún está intentando descargar del repositorio de maven general:
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/)
¿Alguien puede ayudarme con lo que no estoy haciendo bien? Básicamente, simplemente verifiqué los proyectos desde la línea de comandos, grabé el directorio y ejecuté "mvn clean install", nada más. Cualquier ayuda es muy apreciada.
el pom.xml para el proyecto que tengo no tiene este " http://repo1.maven.org/myurlhere " en ninguna parte de él
Todos los proyectos tienen http://repo1.maven.org/ declarado como <repository>
(y <pluginRepository>
) de forma predeterminada. Este repositorio, que se llama el repositorio central , se hereda como otros valores predeterminados de la "Super POM" (todos los proyectos heredados de la Super POM). Por lo tanto, un POM es en realidad una combinación de Super POM, cualquier POM principal y el POM actual. Esta combinación se denomina "POM efectivo" y puede imprimirse utilizando el objetivo de effective-pom
del complemento de ayuda de Maven (útil para la depuración).
Y de hecho, si corres:
mvn help:effective-pom
Verás 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>
tiene la URL absoluta donde está el repositorio de maven para el proyecto, pero aún está intentando descargar del repositorio de maven general
Maven intentará encontrar dependencias en todos los repositorios declarados, incluso en el central, que está ahí por defecto, como vimos. Pero, de acuerdo con la traza que está mostrando, solo tiene un repositorio definido (el repositorio central) o Maven 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)
Entonces, básicamente, maven no puede encontrar el url.project:project:pom:xx
porque no está disponible en la central.
Pero sin saber qué proyecto ha verificado (puede que tenga instrucciones específicas) o qué dependencia falta (puede encontrarse en otro repositorio), es imposible ayudarlo más.
Básicamente, todo lo que Maven le está diciendo es que ciertas dependencias en su proyecto no están disponibles en el repositorio central de maven. El valor predeterminado es buscar en su carpeta .m2 local (repositorio local), y luego en los repositorios configurados en su POM, y luego en el repositorio central de Maven. Mira la section de repositorios de la referencia de Maven.
El problema es que el proyecto que se registró no configuró el POM de tal manera que se pudieran encontrar todas las dependencias y que el proyecto se pudiera construir desde cero.
Creo que lo que te has perdido aquí es esto:
https://maven.apache.org/settings.html#Servers
Los repositorios para descarga y despliegue están definidos por los repositorios y los elementos de gestión de distribución de la POM. Sin embargo, ciertas configuraciones como el nombre de usuario y la contraseña no deben distribuirse junto con el pom.xml. Este tipo de información debe existir en el servidor de compilación en la configuración.xml.
Esta es la forma preferida de usar repositorios personalizados. Entonces, probablemente lo que está sucediendo es que la url de este repositorio está en settings.xml del servidor de compilación.
Una vez que obtenga la url y las credenciales, puede ponerlas en su máquina aquí: ~/.m2/settings.xml
esta manera:
<settings ...>
.
.
.
<servers>
<server>
<id>internal-repository-group</id>
<username>YOUR-USERNAME-HERE</username>
<password>YOUR-PASSWORD-HERE</password>
</server>
</servers>
</settings>
Por defecto, Maven siempre buscará en el repositorio oficial de Maven, que es http://repo1.maven.org/ .
Cuando Maven intente construir un proyecto, buscará en su repositorio local (por defecto ~/.m2/repository
pero puede configurarlo cambiando el valor <localRepository>
en su ~/.m2/settings.xml
) para encontrar cualquier dependencia, complemento o informe definido en su pom.xml
. Si no se encuentra el artefacto adecuado en su repositorio local, se buscará en todos los repositorios externos configurados, comenzando con el predeterminado, http://repo1.maven.org/ .
Puede configurar Maven para evitar este repositorio predeterminado configurando un espejo en su archivo 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 se pondrá en contacto con su repositorio empresarial ( http://the/server
en este ejemplo).
Si desea agregar otro repositorio, puede definir uno nuevo 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>
Puedes ver el modelo completo de settings.xml
here .
Con respecto al proceso de clean
, puede pedir a Maven que lo ejecute sin conexión . En este caso, Maven no intentará acceder a ningún repositorio externo:
mvn -o clean