Configuración del repositorio remoto privado Maven


Estoy tratando de configurar un repositorio remoto privado para nuestro equipo. Ahora el repositorio sirve lo siguiente con hasta ahora he intentado -

  • Cuando se emite un' mvn compile', entonces busca dependencias en "~/.m2". Si no se encuentra allí, entonces va al repositorio privado remoto y cuando las dependencias todavía están ausentes aquí, entonces va al repositorio central.

  • Antes de la compilación, tengo que poner todas las dependencias en nuestro privado (y remoto) junto con la suma de comprobación y los metadatos.

  • Cuando necesitamos un artefacto (eg-spring-mvc), necesitamos ponerlo en el repositorio privado remoto junto con todas las dependencias de ese artefacto (spring-mvc). En este caso "spring-mvc" se descarga desde nuestro repositorio privado remoto. Pero las dependencias de "spring-mvc" no se descargan de nuestro repositorio privado remoto. Se descargan desde el repositorio central.

Ahora lo que estoy tratando de hacer es -

  • Configurando un repositorio remoto privado ' R ' de tal manera que no tenga que poner todas las dependencias a mano. Cuando se emite un "mvn compile", primero que nada; las dependencias se buscan en "~/.m2 "si no se encuentra entonces va al repositorio remoto privado 'R'. Si las dependencias se encuentran en ' R 'entonces"~/.m2 " lo obtendrá de 'R'. Si las dependencias no se encuentran en 'R', estas dependencias se descargan desde los repositorios centrales y mantienen dependencias en ' R ' para usos posteriores. Después de eso.m2 'los obtendrá de 'R'. Aquí no necesito poner las dependencias en nuestro repositorio privado remoto 'R' a mano.

  • '~/.m2 'obtendrá todas las dependencias de" spring-mvc " (que es la dependencia principal mencionada en el pom de mi proyecto.xml) del repositorio privado remoto ' R 'y' R ' los obtendrán del repositorio central respectivo.

¿Puede alguien sugerir alguna forma / o tutorial de referencia para cumplir con estos dos por encima de los objetivos? Gracias de antemano.

EDIT: He intentado con La respuesta y el nexo de Nathaniel Waisbrot -2.7.0-06- bulto. Después de horas de esfuerzos, soy capaz de configurarlo mientras estoy usando jre-7. Con jre-6, nexus no se puede iniciar. Pero nuestro proyecto se implementa con JDK-6. No queremos cambiar la versión actual de jre. Con jre-6 apache-archiva está bien. Pero no estoy seguro de si puedo lograr todos los objetivos de la sección anterior. ¿Hay algún usuario/experto archiva que pueda dime si puedo cumplir con estos objetivos en la sección anterior.

Author: Razib, 2014-01-02

3 answers

He configurado nexus para reflejar mi repositorio local maven (en ~/.m2/repository.) Ya que este post todavía es visitado por mucha gente, creo que sería útil para otros si comparto cómo configuré nexus como un administrador de repositorio. Este procedimiento funciona perfectamente para mí en Ubuntu 12.04. Aquí está -

1. Descargar nexus-2.11.1-01-bulto.alquitrán.gz o la última versión de nexus oss.

2. Extrae el archivo tar en tu casa directorio-

$ tar -xvf nexus-2.11.1-01-bundle.tar.gz

Ahora obtendrá dos directorios - nexus-2.11.1-01 y sonatype-work en su directorio personal.

3. Copie estos dos directorios a /usr/local/ directorio (se pueden copiar a otro lugar) -

$ cp -r nexus-2.11.1-01 /usr/local/
$ cp -r sonatype-work /usr/local/

Los archivos ejecutables/de configuración relacionados con nexus se almacenan en el directorio nexus-2.11.1-01 y el archivo jar mencionado en pom.xml se almacenan en el directorio sonatype-work.
Estos archivos jar son espejo de su ~/.m2/repository. Primera vez que emite un comando mvn package entonces todos los jars se almacenan aquí. Después de eso, cuando se emite mvn package de nuevo, todos los jars se descargan desde el repositorio nexus en lugar de descargarse desde el repositorio central.

4. Ir al directorio /usr/local/ -

$ cd /usr/local/  

5. Crear un enlace a nexus-2.11.1-01 -

$ sudo ln -s nexus-2.7.0-06 nexus

6. Ahora para ejecutar nexus escriba lo siguiente en terminal -

$ bash nexus/bin/nexus console  

Aquí nexus se adjunta con su consola. Si cierras tu consola, entonces el nexus el servidor será terminado. Cuando usted está tratando de ejecutar nexus para una máquina Ubuntu server entonces usted puede utilizar pantalla.

Nota: Al intentar ejecutar nexus usando el comando anterior pueden ocurrir 2 problemas. Si no encuentra ningún problema, omita los siguientes 2 pasos (paso - 7 y 8)

7. El primer problema puede ocurrir debido a un permiso insuficiente. Lea el mensaje de error y tome las medidas necesarias. Pero como solución rápida puedes hacer esto -

$ sudo chmod -R 777 nexus-2.11.1-01/
$ sudo chmod -R 777 sonatype-work/

8. Si está utilizando cualquier jdk versión inferior a java 7 que el siguiente mensaje de error puede ser mostrado -

Wrapper | Lanzamiento de una JVM... wrapper / JVM salió al cargar el aplicación. jvm 1 | Excepción en el hilo " principal" Java.lang.Error de conversión de clase no soportado: org/sonatype/nexus/bootstrap / jsw / JswLauncher : Major no soportado.menor version 51.0

En este caso use jdk7 para ejecutar el comando mencionado en el paso 6. En ubuntu es bastante fácil. Asumiendo que tienes dos jdk-jdk6 y jdk7. Tu proyecto se ejecuta en jdk6. Entonces solo para ejecutar nexus puede hacer esto desde su terminal (asumiendo su jdk7 en el directorio /usr/lib/jvm/jdk1.7.0_45) -

$ export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_45
$ export PATH=$JAVA_HOME/bin:$PATH  

9. Ahora en el navegador escriba la dirección - http://localhost:8081/nexus/. Si el paso 1 al 6 (si se produjeron errores, entonces el paso 1 al 8) se realiza perfectamente, puede encontrar con éxito la pantalla de inicio de sesión. El nombre de usuario de inicio de sesión predeterminado es - admin y la contraseña es - admin123

10. Detener nexus. Simplemente cierre el terminal o presione Ctrl+C en el terminal del paso 6. En su directorio ~/.m2 cree un archivo vacío llamado - settings.xml. Copie el siguiente contenido en este archivo settings.xml -

<settings>
    <mirrors>
        <mirror>
        <!--This sends everything else to /public -->
            <id>nexus</id>
            <mirrorOf>*</mirrorOf>
            <url>http://localhost:8081/nexus/content/groups/public</url>
        </mirror>
    </mirrors>

    <profiles>
        <profile>
            <id>nexus</id>
            <!--Enable snapshots for the built in central repo to direct -->
            <!--all requests to nexus via the mirror -->
            <repositories>
                <repository>
                <id>central</id>
                <url>http://central</url>
                <releases><enabled>true</enabled></releases>
                <snapshots><enabled>true</enabled></snapshots>
                </repository>
            </repositories>

            <pluginRepositories>
                <pluginRepository>
                    <id>central</id>
                    <url>http://central</url>
                    <releases><enabled>true</enabled></releases>
                    <snapshots><enabled>true</enabled></snapshots>
                </pluginRepository>
            </pluginRepositories>
        </profile>
    </profiles>

    <activeProfiles>
    <!--make the profile active all the time -->
        <activeProfile>nexus</activeProfile>
    </activeProfiles>
</settings>

11. Y agrega las siguientes líneas en el archivo pom.xml de tu proyecto -

<distributionManagement>
    <snapshotRepository>
        <id>my-snapshots</id>
        <name>My internal repository</name>
        <url>http://localhost:8081/nexus/content/repositories/snapshots</url>
    </snapshotRepository>

    <repository>
        <id>my-releases</id>
        <name>My internal repository</name>
        <url>http://localhost:8081/nexus/content/repositories/releases</url>
    </repository>
</distributionManagement>
 41
Author: Razib,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-27 07:05:08

Sonatype Nexus hace todo lo que quiere, necesita muy poca configuración para lo que está pidiendo, y tiene una interfaz agradable. Hay algunos detalles sobre la configuración básica bajo la pregunta " Repositorio Interno Maven, ¿Es realmente Tan Difícil?"

Básicamente, puede configurar Nexus como un repositorio de almacenamiento en caché: su cliente Maven solo visitará el repositorio interno. Cuando el repositorio interno no puede encontrar un artefacto, va a Central (o a cualquier otro repositorio externo que define), lo obtiene para usted, y lo almacena para más tarde.

Esto es genial porque si quieres hacer la transición de un entorno libre-para-todo-lo-que-sea-dependencies-que-quieras a un entorno bloqueado, Nexus lo hace fácil. Usted lo configura para que tire de Central, ejecute su compilación desde una máquina limpia (forzando a Nexus a ingerir todas las dependencias Centrales actuales) y luego desactive la función proxy-repo (por lo que cualquier dependencia nueva/cambiada será administrada por devops).

 8
Author: Nathaniel Waisbrot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:34:45

Lo que has descrito es prácticamente la configuración predeterminada de la mayoría de los administradores de repositorios, incluido Archiva. ¿Lo siguiente ayuda a configurarlo para usarlo desde Maven?

Http://archiva.apache.org/docs/1.3.6/userguide/using-repository.html

 4
Author: Brett Porter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-05 23:02:10