2015-10-09 2 views
1

Пытается использовать команду commons-vfs sync ant от Groovy. Решил большинство вещей, но все еще имел некоторые проблемы. Вот мой заводной сценарий:Использование commons-vfs sync ant task from groovy

@Grapes([ 
    @Grab(group='org.apache.commons', module='commons-vfs2', version='2.0'), 
    @Grab(group='com.jcraft', module='jsch', version='0.1.53'), 
    @GrabConfig(systemClassLoader = true) 
]) 

import groovy.xml.NamespaceBuilder 
import groovy.io.FileType 

localRootDir = 'forUpdateSite' 
updateServer = 'some.remote.server.com' 
remoteRootDir = '/var/www/directory' 

println("Syncing files from ${localRootDir} to ${updateServer} ${remoteRootDir}"); 

def ant = new AntBuilder() 
def vfs = NamespaceBuilder.newInstance(ant, 'antlib:org.apache.commons.vfs2.tasks') 
def remoteURI = "sftp://username:{FAKEENCRYPTEDPASSWORD}@${updateServer}${remoteRootDir}" 
vfs.sync (destdir: remoteURI) { 
    src() { 
    file: localRootDir 
    } 
} 

На данный момент единственное, что мне не хватает в том, как указать локальный каталог и файлы. Этот пример дает мне эту трассировку стека:

Syncing files from forUpdateSite to some.remote.server.com /var/www/directory 

Caught: : No source file specified. 
: No source file specified. 
    at org.apache.commons.vfs2.tasks.AbstractSyncTask.addConfiguredSrc(AbstractSyncTask.java:149) 
    at org.apache.tools.ant.IntrospectionHelper$AddNestedCreator.istore(IntrospectionHelper.java:1469) 
    at org.apache.tools.ant.IntrospectionHelper$AddNestedCreator.store(IntrospectionHelper.java:1463) 
    at org.apache.tools.ant.IntrospectionHelper$Creator.store(IntrospectionHelper.java:1370) 
    at org.apache.tools.ant.UnknownElement.handleChild(UnknownElement.java:582) 
    at org.apache.tools.ant.UnknownElement.handleChildren(UnknownElement.java:349) 
    at org.apache.tools.ant.UnknownElement.configure(UnknownElement.java:201) 
    at org.apache.tools.ant.UnknownElement.maybeConfigure(UnknownElement.java:163) 
    at syncToUpdateSite.run(syncToUpdateSite.groovy:53) 

ответ

0

оказалось довольно просто:

@Grapes([ 
    @Grab(group='org.apache.commons', module='commons-vfs2', version='2.0'), 
    @Grab(group='com.jcraft', module='jsch', version='0.1.53'), 
    @GrabConfig(systemClassLoader = true) 
]) 

import groovy.xml.NamespaceBuilder 
import groovy.io.FileType 

localRootDir = 'forUpdateSite' 
updateServer = 'some.remote.server.com' 
remoteRootDir = '/var/www/directory' 

println("Syncing files from ${localRootDir} to ${updateServer} ${remoteRootDir}"); 

def ant = new AntBuilder() 
def vfs = NamespaceBuilder.newInstance(ant, 'antlib:org.apache.commons.vfs2.tasks') 
def remoteURI = "sftp://username:{FAKEENCRYPTEDPASSWORD}@${updateServer}${remoteRootDir}" 
vfs.sync (destdir: remoteURI, 
      src: localRootDir) 

Обратите внимание, что вы должны включать в себя модуль JSch с @Grab для SFTP URL разборе работать. Я получил трассировку стека ниже, прежде чем я включил это.

Caught: : Badly formed URI "sftp://username:***@some.remote.server.com/var/www/directory". 
: Badly formed URI "sftp://username:***@some.remote.server.com/var/www/directory". 
    at org.apache.commons.vfs2.tasks.AbstractSyncTask.execute(AbstractSyncTask.java:227) 
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291) 
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 
    at syncToUpdateSite.run(syncToUpdateSite.groovy:52) 
Caused by: org.apache.commons.vfs2.FileSystemException: Badly formed URI "sftp://username:***@some.remote.server.com/var/www/directory". 
    at org.apache.commons.vfs2.provider.url.UrlFileProvider.findFile(UrlFileProvider.java:91) 
    at org.apache.commons.vfs2.impl.DefaultFileSystemManager.resolveFile(DefaultFileSystemManager.java:713) 
    at org.apache.commons.vfs2.impl.DefaultFileSystemManager.resolveFile(DefaultFileSystemManager.java:649) 
    at org.apache.commons.vfs2.impl.DefaultFileSystemManager.resolveFile(DefaultFileSystemManager.java:636) 
    at org.apache.commons.vfs2.tasks.VfsTask.resolveFile(VfsTask.java:56) 
    at org.apache.commons.vfs2.tasks.AbstractSyncTask.handleFiles(AbstractSyncTask.java:247) 
    at org.apache.commons.vfs2.tasks.AbstractSyncTask.execute(AbstractSyncTask.java:218) 
    ... 3 more 
Caused by: java.net.MalformedURLException: unknown protocol: sftp 
    at org.apache.commons.vfs2.provider.url.UrlFileProvider.findFile(UrlFileProvider.java:72) 
    ... 9 more 
+0

Круто, но вам не нужно положить ваши '@ Grab' аннотаций внутри' '@Grapes –

+0

Спасибо! Хорошо знать. Всегда стараюсь улучшить свой акцент на разных языках, которые я использую. – SteveDonie