java - pom - maven repository
¿Hay alguna manera de hacer que Maven descargue versiones de instantáneas automáticamente? (7)
¿Existe esa dependencia en tu repositorio? (en pom.xml o settings.xml)?
Parece que no. Por cierto, eche un vistazo a su configuración, solo que no está usando -o
(fuera de línea). También puedes usar -U
para actualizar instantáneas.
Así que tengo un proyecto que depende de una versión instantánea de otro proyecto. La dependencia es:
<dependency>
<groupId>org.oop</groupId>
<artifactId>oop</artifactId>
<version>0.9.9-SNAPSHOT</version>
</dependency>
Para el proyecto oop, hice una ''implementación de mvn clean'', por lo que la versión de instantánea debería estar en algún lugar del repositorio central de Maven. Pero cuando hago una instalación limpia mvn, la dependencia de instantáneas anterior no se puede resolver y obtengo esto:
Desaparecido:
1) org.oop: oop: jar: 0.9.9-SNAPSHOT
Intente descargar el archivo manualmente desde el sitio web del proyecto.
Luego, instálelo usando el comando: mvn install: install-file -DgroupId = org.oop -DartifactId = oop -Dversion = 0.9.9-SNAPSHOT -Dpackaging = jar -Dfile = / path / to / file
Alternativamente, si aloja su propio repositorio, puede implementar el archivo allí: mvn deploy: deploy-file -DgroupId = org.oop -DartifactId = oop -Dversion = 0.9.9-SNAPSHOT -Dpackaging = jar -Dfile = / path / to / file -Durl = [url] -DrepositoryId = [id]
¿Hay alguna manera de hacer que Maven descargue la instantánea automáticamente? Debo estar perdiendo algo aquí.
EDIT1: En mi settings.xml tengo:
<server>
<id>sonatype-nexus-snapshots</id>
<username>XXXXXX</username>
<password>XXXXXX</password>
</server>
<server>
<id>sonatype-nexus-staging</id>
<username>XXXXXX</username>
<password>XXXXXX</password>
</server>
EDIT2:
Aclaremos un poco la terminología para asegurarnos de que no haya malentendidos.
"Maven Central" ( http://search.maven.org/ ) es un sitio global en el que solo encuentras lanzamientos. Central no acepta instantáneas, por lo que la implementación debería darte un error.
Probablemente te refieres a tu proxy / caché local / de toda la empresa. Estos también se pueden configurar para rechazar las versiones de instantáneas. En el caso de Nexus, también puede definir reglas más complejas. En mi caso, tuve un problema que no mvn deploy
ningún error durante la mvn deploy
pero pude ver un error en los registros del servidor.
Intente seguir los datos: habilite la depuración ( mvn -X
) para ver dónde Maven carga los datos. Luego revise el servidor para ver si los artefactos fueron realmente cargados. Compruebe los registros del servidor para los errores.
También tenga en cuenta que las dependencias de instantáneas solo se actualizan una vez al día; así que esto no funcionará:
PC # 1: mvn install
-> error falta la dependencia PC # 2: mvn deploy
PC # 1: mvn install
-> la dependencia aún falta debido a la política de "actualización una vez al día"
Intente mvn install -U
para forzar a Maven a actualizar sus metadatos en caché.
Maven intentaría descargar la instantánea automáticamente y, de hecho, lo hace (como indica su error). De forma predeterminada, Maven buscará versiones de instantáneas más nuevas una vez al día, pero puede cambiar ese intervalo en la configuración del repositorio de instantáneas (por ejemplo, en settings.xml):
<updatePolicy>interval:5</updatePolicy>
Esto hará que los expertos se revisen cada 5 minutos (si construyes eso con frecuencia). Alternativamente, puede usar la opción -U
o --update-snapshots
, para forzar la verificación manualmente.
Sin embargo, no se puede encontrar la dependencia. ¿Podría publicar su configuración de repositorio y la configuración de artefactos para la dependencia de instantáneas?
¿Está el org.oop:oop:jar:0.9.9-SNAPSHOT
en su repositorio?
... así que la versión de instantánea debería estar en algún lugar del repositorio central de Maven.
No, no lo es. Intenté buscarlo, pero no pude encontrarlo. Afaik, hay algún mecanismo de puesta en escena, así que tal vez tu configuración sea incorrecta. Pero normalmente, como ya han dicho los demás, usarías tu propio administrador de repositorios como Artifactory o Nexus.
Me topé con el problema de las instantáneas que no se actualizan incluso cuando se configura -U en la línea de comandos. Para mí, el problema era que mi cliente era Maven 3 y el servidor era Maven 2, y en Maven 3 las instantáneas únicas ya no son compatibles. Tuvimos que crear un nuevo repositorio con instantáneas con marca de tiempo para dar soporte a los clientes 3.xx.
Para actualizar las instantáneas, intente con la opción -U
-U,--update-snapshots Forces a check for updated
releases and snapshots on remote
repositories
Sin embargo, usted dijo:
Hice un ''despliegue mvn limpio'', por lo que la versión de instantánea debería estar en algún lugar del repositorio central de Maven.
Esto simplemente no es posible, su instantánea va a otra parte. Si hago una mvn clean deploy
sin configurar mi repositorio personal, obtengo:
La implementación falló: el elemento del repositorio no se especificó en el POM dentro del elemento distributionManagement o en el parámetro -DaltDeploymentRepository = id :: layout :: url
Para habilitar la implementación, se debe agregar alguna configuración a pom.xml, como por ejemplo:
<distributionManagement>
<!-- Publish versioned releases here -->
<repository>
<id>myrepo</id>
<name>My releases</name>
<url>http://nexus.mycompany.com/nexus/content/repositories/releases</url>
</repository>
<!-- Publish snapshots here -->
<snapshotRepository>
<id>myrepo</id>
<name>my snapshots</name>
<url>http://nexus.mycompany.com/nexus/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>
<repositories>
<repository>
<id>myrepo</id>
<name>My Public Repository</name>
<url>http://nexus.mycompany.com/nexus/content/groups/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
Solo agregue esto a su ~ / .m2 / settings.xml:
<profiles>
<profile>
<id>allow-snapshots</id>
<activation><activeByDefault>true</activeByDefault></activation>
<repositories>
<repository>
<id>snapshots-repo</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
<releases><enabled>false</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
</profile>
</profiles>
Tu también puedes
- use un proyecto principal que genere todas sus instantáneas, o
- implemente sus instantáneas en su servidor de compilación Maven (nexus / archiva / ..) usando, por ejemplo, mvn: deploy