2010-07-13 7 views
7

Ist es möglich, ein ganzes Verzeichnis und alle darin enthaltenen Unterverzeichnisse auf einen Nexus-Repository-Server hochzuladen/herunterzuladen?Hochladen/Herunterladen des gesamten Verzeichnisses zu Nexus über Maven

+0

, dass eine bestehende wäre Maven Repo oder einige beliebige Dateien? –

+0

Für das Hochladen auf den Nexus-Server gilt dies für beliebige Dateien. Zum Herunterladen vom Server, denke ich, würde dies vom Nexus-Repository stammen. – Peter

Antwort

2

Sie können das Verzeichnis immer komprimieren und es als Zip-Datei versenden. die Benutzer dieses Ordners können es von Nexus herunterladen und entpacken mit Abhängigkeit: entpacken.

+0

Ja, das ist definitiv eine Möglichkeit, es zu tun, erfüllt aber die Anforderungen nicht vollständig. Danke für die Eingabe though =) – Peter

+0

nun, Sie können mir danken, indem Sie meine Antwort bewerten :) – rperez

4

Für den Fall, dass Sie tatsächlich eine Hierarchie von Dateien bereitstellen möchten, habe ich eine Lösung mit GMaven gehackt (groovy in Maven eingebettet).

Verwenden Sie die Pom unten, geben Sie ein paar Eigenschaften und drücken Sie mvn install. Der Ordner wird gecrawlt und alle darin enthaltenen Dateien werden mit einer artifactId aus dem relativen Pfad bereitgestellt. z.B.

der Basisordner Gegeben

c:\a\b\c 

die Datei

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

die artifactId def-ghi-jkl und die Verpackung mno, änderte sich dies auf etwas anderes sein kann natürlich hätte.

Die Repository-Informationen werden vom Pom übernommen, daher müssen Sie ein DistributionManagement-Element im Pom bereitstellen.

Hier ist es (viele dieser Code wird aus dem deploy:deploy-file mojo genommen):

<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:

ich auf diesem on my blog

erarbeitet
+0

Interessant, ich werde es untersuchen. Vielen Dank! – Peter

+1

Hilfreich! Ich habe es so modifiziert, dass es der lokalen Repository-Ordnerstruktur entspricht. https://gist.github.com/aleung/5194777 – aleung

+1

Wir verwenden seit fast einem Jahr eine modifizierte Version von @aleung Script, ohne Probleme Die Änderungen, um 'maven-metadata.xml' und '.sha' zu behandeln und ".md5" -Dateien können im gegabelten Text gefunden werden: https://gist.github.com/jakub-bochenski/7802ee7f44b8e3b99bdd69b2ab150e6c –

Verwandte Themen