본문 바로가기

00. Functional Programming/Scala

SBT와 SSH or SFTP를 이용한 개인용 Maven Repository 구축

저는 항상 내가 만든 소스에 대한 관리가 필요하다고 생각하는 사람입니다. 그래서 코드를 더욱 재활용할 수 있게 짜는 방법은 없을까? 또, 코드를 관리하는 방법이 없을까? 라는 생각을 합니다.(그러다 보니... 정작 코드를 많이 짜는 경우가 없네요ㅠㅠ)어찌 되었든, 개인의 Code를 관리하는 가장 좋은 방법은 Git + Maven이라고 생각이 듭니다. Git으로 코드에 대한 버전 관리를 하고, Maven으로 내가 만든 코드를 다른 프로그램에서도 쉽게 쓸 수 있다면 더할 나위 없이 좋으니까요.

그래서 Maven을 사용하기 위하여 nexus를 깔고 사용법을 익히다가, "혼자 쓰는데 이렇게 대단하게(?) 할 필요가 있나?" 라는 생각을 하게 되었습니다. 그래서 검색을 해보니, SFTP나, SSH를 이용하여 Maven처럼 개인용 Repository를 사용할 수 있다는 사실이 있어서, 이렇게 포스팅을 합니다. 물론 영어로는 많이 있는데, 한글로 없어서;;; 이렇게 포스팅 합니다.


이것을 사용하기 위해서는 개인용 FTP Server나, SSH Server가 필요합니다. 저는 저의 개인 서버를 사용하였습니다.


먼저, Publish 하는 모듈에 게인용 FTP 서버로 Publish 하기 위하여 build.sbt에 다음과 같이 세팅합니다.


organization := "org.ktz"
name := "FileManager"
version := "1.0"

publishMavenStyle := false

publishTo := Some(Resolver.sftp("ktz-ssh-repo", "example.com", "/home/ktz/Repository")(Resolver.ivyStylePatterns) as ("ktz"))
//SSH일 경우
//publishTo := Some(Resolver.ssh("ktz-ssh-repo", "example.com", "/home/ktz/Repository")(Resolver.ivyStylePatterns) as ("ktz"))


Resolver의 Parameter를 보면 다음과 같습니다.


"ktz-ssh-repo" : repository 이름 - 각자 알아서 설정

"example.com" : FTP Server 이름

"/home/ktz/Repository" : FTP Server 내의 Repository 경로

"Resolver.ivyStylePatterns" : 저장 패턴

"ktz" : FTP 사용자 이름

추가로 패스워드 입력 가능


여기서, organization은 GroupID라고 생각하시면 됩니다. 또, SSH일 경우, Resolver.sftp에서 Resolver.ssh로 변경하면 됩니다. 그 후, SBT를 사용하여 Publish를 해봅시다.


$ sbt publish


이렇게 하면 다음과 같이 FTP아이디를 쓰는 창이 뜹니다. 창이 뜨면 FTP ID와 비번을 입력하고 확인을 누릅니다.



Publish에 성공 하면 FTP Server 경로 /home/user/Repository/org.ktz/filemanager_2.11/1.0 에 다음과 같이 파일이 있는 것을 확인 할 수 있습니다.


.

..

docs

ivys

jars

srcs


이제 사용할 Dependency가 있는 SBT 프로젝트에 다음과 같이 추가를 하면 됩니다.


resolvers += Resolver.sftp("ktz-ssh-repo", "example.com", "/home/ktz/Repository")(Resolver.ivyStylePatterns) as ("ktz")


그 후, Dependency를 받아 올때 다시 FTP ID와 PW를 적는 팝업이 뜹니다.



이렇게 FTP나, SSH를 사용하여 Server를 마치 개인용 Maven Repository로 사용할 수 있습니다.