728x90
반응형
오늘은 많은 것을 하였다.
일단 svn server를 설치하였다. (다른 사람이 나의 컴퓨터에서 코드를 관리하기로 했기 때문이다.. 아주 private 하다..)
그리고 font와 관련한 공부를 했다. 왜냐하면 PDF를 생성할 때 font 가 중요하기 때문이다. 어쩔때는 한글이 깨지고 어쩔때는 안깨지고.. (영어는 당근 안깨진다..)
그래서 시스템에 기본적으로 셋팅되있는 font를 출력하는 프로그램을 만들었다.. (윈도우와 리눅스에서 default로 바라보는 폰트의 경로도 궁금했고, 무슨 font를 갖고있는지 궁금했다..)
윈도우 환경이랑 리눅스 환경에서 PDF 생성 테스트를 하기 위해서 jar로 package하여 테스트를 하기로 마음을 먹었다.
그런데.. jar로 패키징 처음부터 난관에 봉착했다.
mvn package 명령어를 실행하였더니 ERROR가 나고 로그가 이런식으로 찍혔다.
from/to central (https://repo.maven.apache.org/maven2): Received fatal alert: protocol_version
예전에도 이런 에러를 발견했는데 그때는 그냥 https 를 http 로 고쳐서 사용했다.. (원인은 잘몰랐음)
이것이 무엇인고 하고 검색을하다보니, 아래와 같은 이유임을 알게됬다.
Repository가 https(TLS v1.2) 프로토콜로 연결되어야 하는데 JDK 낮은 버전에서는 TLS v1.0 ~ v1.1이 기본값이라서 그렇단다.
(JDK ~7 까지, JDK8 부터는 그냥 사용 가능)
나의 로컬은 JDK 8버전이나.. 프로젝트는 JDK6 을 사용한다..
그래서 바로 해결책은 mvn 명령어에 -Dhttps.protocols=TLSv1.2 를 붙여주는 것이다...! (공부할 것이 쌓여가는 거 같다..)
mvn -Dhttps.protocols=TLSv1.2 clean package를 하여 jar파일을 만들었다..
그리고 리눅스로 옮기기전에 내 로컬 피시 CMD에서 테스트를 하였다. (java -jar jar명..)
근데 또 오류가 났다..
오류의 내용은 jar명.jar에 기본 Manifest 속성이 없습니다.
mvn package로 생성된 jar 파일은 실행 가능한 jar파일이 아니다.. 매니페스트 파일이 제대로 생성되지 않았기 때문이다.
따라서 maven-jar-plugin이 필요하다.
maven-jar-plugin 설정을 했다. (나중에 포스팅할 예정)
그리고 jar로 묶은 후 실행하였다.
근데 또 오류가 났다..
그 이유는 ClassNotFound ..!! dependency에 걸려있던 library 를 못찾는 것이다.
곰곰히 생각해보니.. 예전에도 이런 경험을 한적이 있다. jar 로 패키징을 할때 dependnecy가 걸려있는 모든 library를 포함해서 패키징하려면 추가적인 maven의 plugin을 설정해줬어야 했다. (공부할 것이 쌓여감. 기록을 안해놔서 까먹었었음. 그러나 Git에 소스가 있어서 참조함)
maven-assembly-plugin 이다. jar로 패키징할 때 dependencies 들과 같이 패키징해주는 놈인데. manifest까지 설정할 수 있어서 아까 위에서 사용한 plugin인 maven-jar-plugin을 빼도 정상 동작한다.
mvn assembly:assemby
다시 jar로 패키징을 한 후 실행하였떠니 잘 동작한다. (리눅스에서 테스트도 성공적으로함)
역시 기록하지 않으면 계속 똑같은 실수를 반복하는 거 같다. 나는 웹개발자이기 때문에 사실 jar파일로 java소스를 패키징할 일이 거의 없다... 예전에 과제가 있어서..maven으로 jar 패키징하여서 제출한적이 있다.(조건이였음) 그때 한번씩 삽질을 한 것이었는데 처음보는 것 같은 느낌이 든다. 이번에는 확실히 익히고 포스팅하여 내것으로 만들어야 겠다.
주말에 꼭 포스팅을 해야겠다...
728x90
반응형