2010-07-13 11 views
7

E 'possibile caricare/scaricare un'intera directory e tutte le sottodirectory all'interno di esso da/verso un server di repository Nexus?Carica/scarica l'intera directory su Nexus tramite Maven

+0

vorrei che essere uno esistente Maven repo o alcuni file arbitrari? –

+0

Per il caricamento sul server Nexus, questo è per file arbitrari. Per il download dal server, immagino che questo provenga dal repository Nexus. – Peter

risposta

2

È sempre possibile comprimere la directory e inviarla come file zip. gli utenti di questa cartella possono scaricarlo da Nexus e decomprimerlo usando dependency: unpack.

+0

Sì, questo è sicuramente un modo per farlo ma non soddisfa completamente i requisiti. Grazie per l'input però =) – Peter

+0

beh, puoi ringraziarmi valutando la mia risposta :) – rperez

4

Nel caso in cui si desidera distribuire effettivamente una gerarchia di file, ho violato una soluzione utilizzando GMaven (groovy incorporato in Maven).

Utilizzare il pom qui sotto, fornire alcune proprietà e premere mvn install. La cartella verrà sottoposta a ricerca per indicizzazione e tutti i file al suo interno verranno distribuiti utilizzando un oggetto artefatto prelevato dal relativo percorso. per esempio.

Data la cartella di base

c:\a\b\c 

il file

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

avrebbe l'artifactId def-ghi-jkl e l'imballaggio mno, questo può naturalmente essere cambiato in qualcosa d'altro.

Le informazioni sul repository verranno prese dal pom, quindi è necessario fornire un elemento di gestione della distribuzione nel pom.

Qui è (un sacco di questo codice è preso dalla 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:

ho elaborato su questo on my blog

+0

Interessante, lo esaminerò. Grazie! – Peter

+1

Utile! L'ho modificato per adattarlo alla struttura delle cartelle del repository locale. https://gist.github.com/aleung/5194777 – aleung

+1

Abbiamo usato una versione modificata dello script @aleung per quasi un anno senza problemi Le modifiche per gestire "maven-metadata.xml" e ".sha" e i file '.md5' possono essere trovati nel gist biforcuto: https://gist.github.com/jakub-bochenski/7802ee7f44b8e3b99bdd69b2ab150e6c –