2012-09-12 2 views
3

"Jsch를 사용하여 파일을 복사하는 방법" 처음에는 질문이었습니다. Jsch를 사용하면 복잡하고 오류가 발생하기 쉽고 또한 매우 낮은 수준에서 작동하므로 간단한 scp 작업을하려면 여러 줄을 프로그래밍해야합니다.Jsch를 사용하여 scp를 구현하고 휠을 다시 만들지 마십시오.

따라서 에 가능한 한 적은 코드 행으로 scp (또는 sftp)를 구현하고 DRY 원칙을 위반하지 않으려면 어떻게해야합니까?

답변

5

당신은 개미 SCP 작업에 사용되는 라이브러리를 사용할 수 있습니다

package org.example.scp; 

import org.apache.tools.ant.Project; 
import org.apache.tools.ant.taskdefs.optional.ssh.Scp; 

public class ScpCopyExample { 

    public void downloadFile(String remoteFilePath, String localFilePath) { 
     Scp scp = new Scp(); 
     scp.setFile("username:[email protected]:" + remoteFilePath); 
     scp.setLocalTofile(localFilePath); 
     scp.setProject(new Project()); // prevent a NPE (Ant works with projects) 
     scp.setTrust(true); // workaround for not supplying known hosts file 

     scp.execute(); 
    } 

    public static void main(String[] args) { 
     ScpCopyExample scpDemo = new ScpCopyExample(); 
     scpDemo.downloadFile("~/test.txt", "testlocal.txt"); 
    } 

} 
내 클래스 경로에 다음 항아리에 이런 짓을

:

  • jsch-0.1.48.jar
  • 개미 -jsch-1.6.5.jar
  • 개미-1.7.0.jar
  • 개미 - 실행 - 1.7.0.jar

이 예제는 파일 업로드 또는 SFTP 대신 쉽게 확장 할 수 있습니다.

+0

사이먼, 당신은 내 주인공입니다. 나는 antBuilder를 사용하고 반사를 통해 taskdef classpath를 먹이로 시도한 gradle 플러그인을 가지고있다. 모든 테스트가 성공했고 배포가 실패했습니다. 귀하의 방법 (이미 OS 감지에 사용했지만 잊어 버렸습니다)을 사용하면 테스트 및 실행 환경에서 작동합니다. 고마워, 고마워, 고마워. Peter –

+0

@PeterKahn이 당신을 도울 수있어서 기쁩니다! – SimonTheSorcerer

1

가능한 한 적은 줄이 있습니까? ANT scp task을 활용하는 그루비 예제를 사용해보십시오.

@Grapes([ 
    @Grab(group='org.apache.ant', module='ant-jsch', version='1.8.4'), 
    @GrabConfig(systemClassLoader=true) 
]) 

def ant = new AntBuilder()  
ant.scp(file:"helloworld.doc", todir:"[email protected]:/home/mark/docs", password:"sEcReT") 

Grape annotations은 런타임에 jar 종속성을 다운로드합니다.

+0

답변 해 주셔서 감사합니다. 솔루션은 Java에 있어야한다고 언급하는 것을 잊지 마십시오. 이 질문에 추가 할 것입니다. 그러나 당신의 길은 매우 매력적으로 보입니다. – SimonTheSorcerer

+1

@SimonTheSorcerer Understood. 귀하의 예제도 ANT 작업을 사용하므로 두 솔루션 모두 기본적으로 동일합니다. 줄 간격 차이는 언어 구현의 차이로 요약됩니다. (Groovy는 Java로 쉽게/컴파일 될 수 있습니다.) –

+0

둘 다 Ant를 사용합니다. 이것이 맞습니다. Groovy 초심자로서 Java에서 예제를 호출하는 방법을 알지 못합니다. 그리고 예를 들어 어떻게하면 Maven pom.xml을 설정해야하는지, 또는 작동시키기 위해서는 어느 라이브러리를 다운로드해야하는지. – SimonTheSorcerer

관련 문제