java - central - ¿Cómo configurar Archiva+repositorio de instantáneas internas para Maven?
maven central (3)
Estamos tratando de usar Archiva como un proxy de Maven para los repositorios centrales y otros externos, y también como un almacenamiento de instantáneas para nuestros artefactos que Hudson construye automáticamente desde SVN y se instala en el repositorio de instantáneas.
No puedo configurar mi cliente Maven para usar los repositorios internos y de instantáneas juntos. Mi proyecto tiene algunas dependencias externas (como log4j
) que se descargan correctamente desde el repositorio interno de Archiva. También mi proyecto tiene una dependencia de un proyecto propio cuyo artefacto ya está construido e instalado en el repositorio de instantáneas. Sin embargo, si intento construir el proyecto, Maven no puede encontrar mi artefacto de instantánea.
Mi archivo de configuración tenía originalmente esta configuración:
<mirror>
<id>company-internal</id>
<name>Company''s Archiva - Internal Repository</name>
<url>http://www.mycompany.hu/archiva/repository/internal</url>
<mirrorOf>*</mirrorOf>
</mirror>
y luego agregué lo siguiente:
<mirror>
<id>company-snapshots</id>
<name>Company Archiva - Snapshots Repository</name>
<url>http://www.mycompany.hu/archiva/repository/snapshots</url>
<mirrorOf>apache.snapshots</mirrorOf>
</mirror>
Sin embargo, Maven no intenta buscar el repositorio de instantáneas en la compilación. ¿Qué hice mal? Por cierto, realmente no <mirrorOf>
propósito de los elementos <mirrorOf>
. He intentado reemplazar esto en la configuración del espejo interno a la central
pero esto todavía no soluciona mi problema.
A través de mucha prueba y error llegué a una configuración bastante similar a la de Raghuram. Sin embargo, usando archiva, encontré una o dos cosas que aún podrían ser notables. Además, utilicé los espejos de mi configuración para que mis proyectos pudieran acceder a ellos (establecidos en <distributionManagement/>
en el pom.xml), en lugar de acceder directamente a los repositorios.
Esta es la parte relevante de mi configuración de maven.xml:
<!-- set up servers to point to mirror, for use in project pom -->
<servers>
<server>
<id>my.snapshots</id> <!-- use name of the mirror here -->
<username>user</username>
<password>pwd</password>
</server>
</servers>
<!-- map mirror names to actual repositories -->
<mirrors>
<!-- leave the default mirror in place -->
<mirror>
<id>archiva.default</id>
<mirrorOf>*</mirrorOf>
<url>http://server:port/archiva/repository/internal/</url>
</mirror>
<!-- enter my own -->
<mirror>
<id>my.snapshots</id>
<mirrorOf>archiva.snapshots</mirrorOf>
<url>http://server:port/archiva/repository/snapshots/</url>
</mirror>
<mirrors>
<!-- activate the repo for artifact downloads by setting profile -->
<profiles>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<repositories>
<repository> <!-- mirror will be used during runtime instead of this -->
<id>archiva.snapshots</id> <!-- do not use mirror name here -->
<url>http://server:port/archiva/repository/snapshots/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>
Descubrí que tenía que dar diferentes ID en la sección <mirrors>
que en la sección <profiles>
, por lo que aparentemente no se me permitió darles el mismo nombre que Raghuram.
Ahora, con la configuración.xml en su lugar, me propuse cambiar la sección <distributionManagement>
en el pom.xml de mi proyecto. Para ser precisos, cambié esta configuración en un pom que es el padre de todos mis proyectos: contiene principalmente la sección <distributionManagement>
y poco más. Este pom padre se implementa en archiva.
Esta es la sección relevante del pom.xml principal:
<distributionManagement>
<repository>
...
</repository>
<snapshotRepository>
<id>my.snapshots</id>
<name>Archiva Managed Snapshot Repository</name>
<url>http://server:port/archiva/repository/snapshots</url>
<layout>default</layout>
</snapshotRepository>
</distributionManagement>
Este tipo de cosas simplificadas, y tiene, creo, algunos beneficios:
Ahora puedo crear proyectos en función de mis propios artefactos (incluido el pom principal), sin tener ninguno de esos artefactos en mi repositorio de compilación local (borré mi repositorio local para probar esto).
Las descargas (las secciones
<dependencies>
del pom.xml), así como las cargas (las secciones<distributionManagement>
del pom.xml) ahora se manejan a través de los espejos.
A través de muchas pruebas y errores, también llegué a una configuración bastante similar a la anterior, pero las cosas no funcionaron para mí hasta que hice esta configuración por debajo. Por lo tanto, lo estoy publicando en un intento de mejorar la respuesta si está utilizando maven con la ayuda del repositorio de su organización en lugar de utilizarlo en su host local.
Esta respuesta es para aquellos que necesitan múltiples configuraciones de duplicación para múltiples depósitos mantenidos por su organización, entonces esto sería un ejemplo.
my.snapshots user pwd
<!-- map mirror names to actual repositories -->
<mirrors>
<!-- enter my own -->
<mirror>
<id>my.snapshots</id>
<mirrorOf>archiva.snapshots</mirrorOf> <!-- this name should be the same as configured for the below repository id.>
<url>http://server:port/archiva/repository/snapshots/</url>
</mirror>
<!-- leave the default mirror in place -->
<mirror>
<id>archiva.default</id>
<mirrorOf>central</mirrorOf> < !-- Instead of *, replace it with "central"-->
<url>http://server:port/archiva/repository/internal/</url>
</mirror>
<mirrors>
<!-- activate the repo for artifact downloads by setting profile -->
<profiles>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<repositories>
<repository> <!-- mirror will be used during runtime instead of this -->
<id>archiva.snapshots</id> <!-- do not use mirror name here -->
<url>http://server:port/archiva/repository/snapshots/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>
La siguiente configuración funcionó para mí después de algunas pruebas y errores. Aquí utilicé la configuración predeterminada de archiva: internal
para guardar versiones e snapshots
para guardar solo las instantáneas internas.
Esencialmente, a diferencia del nexus , necesitamos dos declaraciones separadas <mirror>
y <repository>
, una para los artefactos normales y la otra para los artefactos de instantáneas.
<mirrors>
<mirror>
<id>archiva</id>
<mirrorOf>*</mirrorOf>
<url>http://localhost:8080/archiva/repository/internal</url>
</mirror>
<mirror>
<id>snapshots</id>
<mirrorOf>snapshots</mirrorOf>
<url>http://localhost:8080/archiva/repository/snapshots</url>
</mirror>
</mirrors>
<profiles>
<profile>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<repositories>
<repository>
<id>internal</id>
<name>Archiva Managed Internal Repository</name>
<url>http://localhost:8080/archiva/repository/internal/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>snapshots</id>
<name>Archiva Managed Internal Repository</name>
<url>http://localhost:8080/archiva/repository/snapshots/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>
</profiles>