Cómo construir y lanzar un proyecto Maven desde una máquina fuera de línea (con un directorio de archivos como repositorio lib)

Necesito construir y lanzar proyectos usando Jenkins, en un servidor sin acceso a Maven Central, e incluso, sin acceso a Nexus.

Dado que tengo acceso a maven-central en máquinas de desarrollo, para llenar el repositorio local de maven, podría hacer

mvn dependency:resolve-plugins dependency:go-offline

para luego copiar el local_repository en el servidor Linux.

Luego, para conseguir un viajeNon-resolvable parent POM error, como se describeaquí, Llené los perfiles específicos para Windows (dev) y Linux (jenkins) con un perfil central falso para anular la referencia central de Maven hecha por mi padre pom:

    <profiles>
        <profile>
            <id>windows</id>
            <activation>              
              <os>
                <family>Windows</family>
              </os>
            </activation>
            <properties>                <repository.base.url>file:///c:/maven_distribution_repo/</repository.base.url>
            </properties>           
        </profile>
        <profile>
            <id>linux</id>
            <activation>              
              <os>
                <family>Linux</family>
              </os>
            </activation>
            <properties>
<repository.base.url>file:///appli/Maven_3.1.1_build/maven_distribution_repo/</repository.base.url>         
            </properties>           
            <repositories>
                <repository>
                  <id>central</id>
                  <name>Maven Plugin Repository</name>
                  <!--<url>http://repo1.maven.org/maven2</url>-->
                  <url>${repository.base.url}</url>
                  <releases>
                    <enabled>false</enabled>
                  </releases>
                </repository>   
            </repositories>
            <pluginRepositories>
                <pluginRepository>
                    <id>central</id>
                    <name>Maven Plugin Repository</name>
                    <!--<url>http://repo1.maven.org/maven2</url>-->
                    <url>${repository.base.url}</url>
                    <layout>default</layout>
                        <snapshots>
                            <enabled>false</enabled>
                        </snapshots>
                        <releases>
                            <updatePolicy>never</updatePolicy>
                        </releases>
                </pluginRepository>
            </pluginRepositories> 
        </profile>
    </profiles>

De esa manera,mvn -o compile todavía levantar unNon-resolvable parent POM error !, pero usando el--legacy-local-repository opción sugeridaaquí , logró falsificar el repositorio remoto utilizando uno local, y elNon-resolvable parent POM problema desaparecido:

mvn - compilación de repositorio local heredado

Aún así, apareció un extraño error (descritoaquí):

[ERROR] Failed to execute goal on project myProject: Could not resolve dependencies for project some.package:myProject:war:0.0.7-SNAPSHOT: Failed to collect dependencies at org.jxls:jxls-poi:jar:1.0.11 -> org.jxls:jxls:jar:[2.0.0,):  org.jxls:jxls:jar:[2.0.0,) within specified range -> [Help 1]

Pero estaba ocultando una advertencia anterior:

[WARNING] Could not transfer metadata org.jxlsjxls/maven-metadata.xml from/to central (/path):/appli/Maven_3.1.1_build/maven_distribution_repo/org/jxls/jxls/maven-metadata-central.xml (access forbidden)

Usando --legacy-local-repository, ¡maven parece usar la ruta del repositorio de distribución como el repositorio de libs local!

Los cambié en el pom:

                <profile>
                    <id>linux</id>
                    <activation>              
                      <os>
                        <family>Linux</family>
                      </os>
                    </activation>
                    <properties>    
    <!--<repository.base.url>file:///appli/Maven_3.1.1_build/maven_distribution_repo/</repository.base.url>-->
    <repository.base.url>file:///appli/Maven-3.1.1_build/maven_local_repo/</repository.base.url>
                    </properties>
...

y también tuve que copiar en el repositorio local: todosmaven-metadata-maven2_central.xml dentromaven-metadata.xml

usando el siguiente comando bash:

for file in $(find /appli/Maven-3.1.1_build/maven_local_repo -type f -name 'maven-metadata-maven2_central.xml'); do cp $file $(echo ${file%/*}/maven-metadata.xml); done

Y ... BINGO!

CONSTRUIR ÉXITO COMPLETO

Parece extraño, en una etapa posterior,release:perform en el repositorio lib local.

¿Tendría una solución mejor y no tan dolorosa?

Respuestas a la pregunta(0)

Su respuesta a la pregunta