2010-07-13 5 views
7

Возможно ли загрузить/загрузить весь каталог и все подкаталоги внутри него на/из сервера репозитория Nexus?Загрузить/Загрузить полный каталог в Nexus через Maven

+0

это будет существующий maven repo или некоторые произвольные файлы? –

+0

Для загрузки на сервер Nexus это для произвольных файлов. Для загрузки с сервера, я думаю, это будет из репозитория Nexus. – Peter

ответ

2

Вы всегда можете заархивировать каталог и отправить его в виде zip-файла. пользователи этой папки могут загрузить его из Nexus и распаковать с помощью зависимости: unpack.

+0

Да, это определенно один из способов сделать это, но не полностью удовлетворяет требованиям. Спасибо за ввод, хотя =) – Peter

+0

ну, вы можете поблагодарить меня по курсу мой ответ :) – rperez

4

Если вы хотите фактически развернуть иерархию файлов, я взломал решение, используя GMaven (groovy, встроенный в maven).

Используйте указатель внизу, поставьте несколько свойств и нажмите mvn install. Папка будет сканироваться, и все файлы внутри нее будут развернуты с использованием файла artifactId, взятого из относительного пути. например

Учитывая Базовой папке

c:\a\b\c 

файл

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

будет иметь артефакт def-ghi-jkl и упаковку mno, это, конечно, может быть изменено на что-то другое.

Информация о репозитории будет взята у pom, поэтому вам нужно предоставить элемент распределения управления в pom.

Вот он (много этого кода берется из deploy:deploy-file харизмы):

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

Я подробно остановился на этом on my blog

+0

Интересно, я посмотрю. Благодаря! – Peter

+1

Полезно! Я изменил его, чтобы он соответствовал структуре папок локального репозитория. https://gist.github.com/aleung/5194777 – aleung

+1

Мы используем модифицированную версию скрипта @aleung почти год без проблем Модификации для обработки «maven-metadata.xml» и «.sha» и файлы «.md5» можно найти в разветвленной строке: https://gist.github.com/jakub-bochenski/7802ee7f44b8e3b99bdd69b2ab150e6c –

Смежные вопросы