2010-07-13 34 views
7

¿Es posible cargar/descargar un directorio completo y todos los subdirectorios dentro de él a/desde un servidor de repositorio Nexus?Cargar/Descargar todo el directorio a Nexus a través de Maven

+0

sería eso una ya existente maven repo o algunos archivos arbitrarios? –

+0

Para cargar en el servidor Nexus, esto es para archivos arbitrarios. Para descargar desde el servidor, supongo que esto sería del repositorio de Nexus. – Peter

Respuesta

2

Siempre puede comprimir el directorio y enviarlo como un archivo zip. los usuarios de esta carpeta pueden descargarla de Nexus y descomprimir usando la dependencia: descomprimir.

+0

Sí, definitivamente esta es una forma de hacerlo, pero no satisface completamente los requisitos. Gracias por la entrada, aunque =) – Peter

+0

bueno, puedes agradecerme por calificar mi respuesta :) – rperez

4

En caso de que realmente desee implementar una jerarquía de archivos, pirateé una solución usando GMaven (groovy embedded in maven).

Usa el siguiente término, suministra algunas propiedades y golpea mvn install. La carpeta se rastreará y todos los archivos que contiene se implementarán utilizando un artefactoId tomado de la ruta relativa. p.ej.

Dada la carpeta base

c:\a\b\c 

el archivo

c:\a\b\c\def\ghi\jkl.mno 

tendría el artifactId def-ghi-jkl y el embalaje mno, esto puede por supuesto ser cambiado a otra cosa.

La información del repositorio se tomará del pom, por lo que debe proporcionar un elemento de gestión de distribución en el pom.

Aquí está (una gran cantidad de este código se toma de la deploy:deploy-file mojo):

<project 
    xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.mycompany</groupId> 
    <artifactId>folderdeployer</artifactId> 
    <packaging>jar</packaging> 
    <version>SNAPSHOT</version> 

    <properties> 
     <!-- This is where your artifacts are --> 
     <deploy.basefolder>c:\temp\stuff</deploy.basefolder> 

     <!-- This will be used as groupId --> 
     <deploy.groupId>my.groupid</deploy.groupId> 

     <!-- this will be used as version --> 
     <deploy.version>1.2.3</deploy.version> 
    </properties> 
    <build> 
     <plugins> 

      <plugin> 
       <groupId>org.codehaus.groovy.maven</groupId> 
       <artifactId>gmaven-plugin</artifactId> 
       <version>1.0</version> 
       <dependencies> 
        <dependency> 
         <groupId>commons-io</groupId> 
         <artifactId>commons-io</artifactId> 
         <version>1.4</version> 
        </dependency> 
       </dependencies> 
       <executions> 
        <execution> 
         <id>deploy-files</id> 
         <phase>prepare-package</phase> 
         <goals> 
          <goal>execute</goal> 
         </goals> 
         <configuration> 
          <source> 
          <![CDATA[ 
// read components from plexus container    
def layout = session.lookup(
    'org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout'); 
def repoFactory = session.lookup(
    'org.apache.maven.artifact.repository.ArtifactRepositoryFactory'); 
def repository = repoFactory.createDeploymentArtifactRepository(
    pom.distributionManagement.repository.id, 
    pom.distributionManagement.repository.url, 
    layout, true); 
def localRepository = session.localRepository; 
def helper = 
    session.lookup("org.apache.maven.project.MavenProjectHelper"); 
def afm = session.lookup(
    'org.apache.maven.artifact.handler.manager.ArtifactHandlerManager'); 
def factory = new org.apache.maven.artifact.factory.DefaultArtifactFactory(); 
factory.class.getDeclaredField("artifactHandlerManager").accessible = true; 
factory.artifactHandlerManager=afm; 

def deployer = session.lookup(
    'org.apache.maven.artifact.deployer.ArtifactDeployer'); 

// initialize properties 
def baseFolder = new File(pom.properties['deploy.basefolder']); 
def groupId = pom.properties['deploy.groupId']; 
def version = pom.properties['deploy.version']; 

// iterate over all files recursively 
baseFolder.eachFileRecurse{ 
    if(it.isDirectory())return; 

    // packaging = file.extension 
    def packaging = it.name.replaceAll(/.+\./ , ''); 
    // artifactId = file.relativePath.replace '/' , '-' 
    def artifactId = it.absolutePath 
     .replace(baseFolder.absolutePath, '') 
     .substring(1) 
     .replaceFirst(/\..*?$/ , '') 
     .replaceAll(/\W+/ , '-'); 
    def artifact = 
     factory.createBuildArtifact( 
      groupId, artifactId, version, packaging); 

    // create pom for artifact 
    def model = new org.apache.maven.model.Model(); 
    model.setModelVersion("4.0.0"); 
    model.setGroupId(groupId); 
    model.setArtifactId(artifactId); 
    model.setVersion(version); 
    model.setPackaging(packaging); 
    File pomFile = File.createTempFile("mvndeploy", ".pom"); 
    pomFile.deleteOnExit(); 
    fw = org.codehaus.plexus.util.WriterFactory.newXmlWriter(pomFile); 
    new org.apache.maven.model.io.xpp3.MavenXpp3Writer().write(fw, model); 
    org.apache.commons.io.IOUtils.closeQuietly(fw); 

    def metadata = 
     new org.apache.maven.project.artifact.ProjectArtifactMetadata(
        artifact, pomFile); 
    artifact.addMetadata(metadata); 

    // deploy file 
    deployer.deploy(it, artifact, repository, localRepository); 
} 
            ]]> 
          </source> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 

    <distributionManagement> 
     <repository> 
      <id>your repo id here</id> 
      <url>scp://your.repo.url/here</url> 
      <layout>default</layout> 
     </repository> 
    </distributionManagement> 

</project> 

EDIT:

elaboré en este on my blog

+0

Interesante, lo investigaré. ¡Gracias! – Peter

+1

¡Útil! Lo modifiqué para adaptarme a la estructura de la carpeta del repositorio local. https://gist.github.com/aleung/5194777 – aleung

+1

Hemos estado usando una versión modificada del script @aleung desde hace casi un año sin problemas Las modificaciones para manejar 'maven-metadata.xml' y '.sha' y los archivos '.md5' se pueden encontrar en la esencia bifurcada: https://gist.github.com/jakub-bochenski/7802ee7f44b8e3b99bdd69b2ab150e6c –

Cuestiones relacionadas