인텔리제이로 jar파일 배포 터미널 오류 (정상적인 jar파일로 만들기)

DK Lee·2023년 5월 11일
0
post-thumbnail

모름지기 어딜가나 길은 있나니...

              얘 한번 보려고 그렇게 고생을 했었다고 한다...
  • jar파일 배포 중 터미널에서 오류가 생기시는 분들을 위한 글입니다

계절이 돌고돌아 어느덧 수료의 날짜는 더 가까워졌다.
하필이면 제일 끝쪽에 앉아 냉기가 계속 들어와 벌벌 떨면서 타자를 친게 엊그제 같은데, 벌써 반팔을 입고도 더위가 느껴지는 날이 오다니 시간 참 빠르다...

팀원들과 마지막 프로젝트를 어느 정도 완성을 해가면서 이제 웹 배포를 해서 먼저 규격을 맞추자는 이야기가 나왔다.

웹 배포 담당(이자 여러가지 잡부)였던 내가 인스턴스와 데이터베이스 같이 쉽게 구성할 수 있는 AWS Lightsail로 구성하자고 먼저 제안을 했고, 팀원들도 받아들였다.

그동안 줄 곧 이클립스만 사용하다가 인텔리제이로 바꾼지 이제 2달...
처음엔 많이도 헤맸지만 지금은 오히려 이클립스가 어색할 지경이다.

그렇게 인스턴스를 새로 생성하고, 인텔리제이에서 jar 파일을 만드는 방법은 STS나 이클립스와는 다르기에 다른 블로그들을 참고하며, jar파일을 생성했다.

- (1) 처음에 시도했던 방법 (!! manifest 실패 방법 !!)

원래 많은 분들이 다들 하시는 방법인데 나는 어떤 이유에서인지 결과적으로 이 방법으로는 정상적인 jar 파일을 생성하는데 실패했다 (터미널 오류)

                       1. file -> project structure
                

                       2. project settings -> 
                             Artifacts -> 
                            +버튼 누르기 -> 
                  jar -> from modules with dependencies
                

                       3. main class에서 자신의 클래스 선택 -> 
                manifest.mf의 경로를 main/resources에 두고 ok를 누르기
                
                

                 4. build artifacts를 누른 후 jar파일을 build
                
                      자 이렇게 jar 파일도 이쁘게 만들었으니 
                터미널에서 java -jar 명령어로 jar파일을 실행해 봤다.

no main manifest attribute

                                  .
                                  .

어이없게도 분명히 main/resources를 위치로 잡아줬음에도 manifest가 존재하지 않다고 나왔다. 몇번을 빌드를 바꿔보고 시도해봤으나 마찬가지 현상이 일어났다

그러다가 문득 manifest의 경로를 찾지 못한것이 아닌가 하여 다시 한번 artifacts를 자세하게 살펴봤다

실제로 artifacts 목록을 보니 manifest에 대한 항목이 전혀 보이지 않았다.
나는 이 부분을 해결하기 위해 동분서주했으나 정보량 자체가 워낙에 적어 계속 시간만 보내고 있었고,
문득 빌드에도 비슷한 내용들이 저장이 되니 빌드에도 manifest에 대한 내용이 있지 않을까 싶었다.

그래서 artifacts에서 만들때 <manifest의 디렉토리를 build-> resources로 바꾸고 다시 한번 만들어봤다.>

결과는 빙고였다. META-INF에 manifest.mf가 정확하게 들어와 있었고 이를 통해서 manifest 오류를 해결했다.

그렇게 정상적으로 되는가 싶었으나...

무수한 오류 문구의 향연을 볼 수 있었다고 한다

이번엔 또 어찌된 일인지 오류 하나하나를 해결해보려고 했으나 너무 많은 오류 문구탓에 일단은 잠깐 뇌정지가 와서 쉬고 있었다.

그래도 기본적인 profile을 못찾는 부분을 보니 근본적으로 뭔가 잘못 되었음을 느꼈다.

결국에 많은 분들이 만드신다는 jar파일 만드는 방법으로는 실패했다.

- (2) 인텔리제이 터미널을 이용한 gradle -jar 생성법 (!! 성공 방법 !!)

그렇게 하루정도 시간을 쏟고서도 해결하지 못하자 나는 다른 방법을 찾아 나섰다.
그것은 바로 선생님 찬스다...
선생님에게 여쭤보니 기본적으로 artifacts가 아닌 전체적인 gradle을 압축해 jar로 만드는 것이 좋다는 답변을 얻었다.

여기에서 인텔리제이 터미널의 방법으로 gradle을 jar로 압축하는 방법을 설명하려고 한다.

  • 인텔리제이의 아래에 보면 terminal이 존재한다

  • .\gradlew clean build를 입력하면 jar파일이 생성이 된다.

    여기에서 .\을 쓰는 이유는 power shell에서 이 gradle의 위치를 찾지 못하기 때문이다.
    또한 처음 빌드하는 사람은 clean을 적지 않아도 무방하나 두번째부터는 깔끔하게 지우고 새로 만드는 것이 좋기에 clean을 적는다.

** 여기에서 LOMBOK을 쓰는 사람들이 종종 bean 주입 오류를 겪는 경우가 있다.

    // lombok
    implementation 'org.projectlombok:lombok:1.18.22'
    annotationProcessor 'org.projectlombok:lombok:1.18.22'

    // annotations
    implementation 'org.jetbrains:annotations:22.0.0'
}

build.gradle에 이 구문을 추가할 경우에는 더 이상 오류가 생기지 않는 것을 확인했다.

이렇게 싱싱하게 생성한 jar파일을 파일질라에 추가하고, 드디어 터미널에서 실행해보았다.

정상적으로 jar 파일 배포에 성공했다!

원래 정상적으로라면 1번 방법으로 성공을 바로 했어야 했으나, 어쩐 이유에서인지 맨땅에 헤딩을 계속하다가 이틀만에 두번째 방법으로 성공을 하긴했다.

왜 아직도 첫번째 방법이 잘 안된 것인지 원인파악을 하는데는 조금 더 시간이 걸릴 것 같으나, 일단 첫번째 방법은 손이 너무 많이 가는 편이기도 해서 개인적으로는 두번째 방법을 앞으로도 계속 선호할 것으로 보인다.

profile
고진감래(苦盡甘來)

0개의 댓글