Maven으로 Leiningen 프로젝트 패키징하기

클로저 프로젝트를 작성할 때 Leiningen을 사용할 때 느끼는 불편함은 일단 ‘느리다’가 첫번째 직면하게 되는 문제이고, 두번째는 아직 널리 사용되는 프로젝트 관리 모델이 아니다보니 클라우드 배포시에 Leiningen이 지원되지 않을 수 있다는 점이다.

결국 Leiningen이 참조하는 project.clj를 Maven용으로 pom.xml로 변환하는 작업이 필요한데, Leiningen은  lein pom 과 같은 옵션을 제공하고 있다. 그러나 필자가 테스트해본 결과에 의하면 그 결과가 썩 만족스럽지 않다. dependencies를 자동으로 작성해주고, project.clj에  :pom-plugins 를 추가해주면 해당 maven 플러그인 세팅을 해주는 정도의 노위 노가다 대체용 정도가 아니라면 결국 pom.xml을 직접 컨트롤 해줘야 하는 것 같다.

다양한 설정에 대해 테스트해 본 것은 아니지만 필자의 경우를 예로 들어보면, Luminus가 자동으로 생성해 준 project.clj를 대상으로 한   lein pom 결과로 얻은 pom.xml로 패키징( mvn package)을 해보면 (  :pom-plugins 를 설정하거나 pom.xml을 직접 수정하여 추가한 이후) jar파일이 성공적으로 생성되는 듯 하지만 다음과 같은 에러를 뱉어 버린다.

처음에는 executable jar 생성에 많이 사용되는 maven-share-plugin을 사용했는데 플러그인 세팅의 문제로 진입점을 찾지 못하는 것으로 생각하여 여러가지로 시도해보았지만 실패하고, maven-assembly-plugin도 사용하는 방법도 써봤지만 재미를 보지 못하다 결국 방법을 찾았다. (참고링크: http://www.elangocheran.com/blog/2015/12/compiling-a-leiningen-project-from-maven/)

exec-maven-plugin을 사용하여  lein uberjar 를 직접 실행하는 것처럼 강제하는 것. 당연히 배포 서버에는 Leiningen이 설치되어 있지 않은 것을 가정하고 있으니,  dependency에 Leiningen 라이브러리를 추가해주어야 한다.

플러그인 세팅은 다음과 같다.

가까스로 방법을 찾긴 했는데,   lein pom 에서 좀 깔끔하게 지원해줬으면 어땠을까 하는 아쉬움이 남는다.

 

%d bloggers like this: