Důležitou ExecuteGroovyScript schopni vyřešit třídy JSch

0

Otázka

Na groovyscript níže se používá k získání souboru ze vzdáleného počítače pomocí protokolu sftp. Potřebuju se dostat do souboru pomocí sftp

import groovy.json.JsonSlurper
import com.jcraft.jsch.*

java.util.Properties config = new java.util.Properties()
config.put "StrictHostKeyChecking", "no"

JSch ssh = new JSch()
def rfile = "/path/to/remote/file/on/remote/host";
Session sess = ssh.getSession 'user','host', 22
sess.with {
setConfig config
setPassword password
connect()
Channel chan = openChannel "sftp"
chan.connect()
ChannelSftp sftp = (ChannelSftp) chan;

def flowFile = session.get()
if(!flowFile) return
flowFile.write{rawIn, rawOut->
    def keyValueList = rawIn.withReader("UTF-8"){ new JsonSlurper().parse(it) }
    sftp.get("rfile/abc.txt").withReader("UTF-8"){reader->
        rawOut.withWriter("UTF-8"){writer->
            reader.eachLine{line->
               keyValueList.each{ if(it.Key) line = line.replaceAll(it.Key, it.Value) }
               writer << line << '\n'
            }
        }
    }
}
chan.disconnect()
disconnect()
REL_SUCCESS << flowFile
}

Získání chyba:

 unable to resolve class JSch @ line 7, column 6. JSch ssh = new JSch()  org.codehaus.groovy.syntax.SyntaxException

Já používám import import com.jcraft.jsch.* ale zdá se, JSch třída není k dispozici, nebo import není správné.

apache-nifi groovy
2021-11-23 21:05:03
1

Nejlepší odpověď

1

budete muset stáhnout jsch knihovny z http://www.jcraft.com/jsch/ a dát do sklenic důležitou/lib adresář

nebo pokud váš důležitou server má přístup k internetu, můžete použít tento skript anotace ke stažení knihovny z veřejného úložiště

@Grab(group='com.jcraft', module='jsch', version='0.1.55')
import com.jcraft.jsch.*
...
2021-11-23 23:49:45

Ano, knihovna chybí. Díky. Myslel jsem, že PutSFTP interně používá com.jcraft.jsch.ChannelSftp.dát , tak tato knihovna by být k dispozici
likeGreen

to používá sshj github.com/apache/nifi/blob/...
daggett

dokonce tak, knihoven uvnitř nar (důležitou procesor svazky) jsou přímo přístupné přes runtime classpath. každý svazek má vlastní classloader a omezené knihovny. můžete to vidět v nifi/work/nar/extensions podsložky. můžete použít tyto knihovny prostřednictvím executegroovyscript - další classpath - ale nedoporučuji to.
daggett

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................