인텔리제이(intelliJ) maven project / Gradle project jar 배포

2020. 5. 11. 20:04Development/[Dev] 개발일반

728x90

인텔리J 2020.1월 버전 기준

 

인텔리j에서 jar를 배포하는 것은 프로젝트 구성 방식이 maven 인지 gradle 인지에 따라 달라진다.

 

*. jar란?

JAR는 여러개의 자바 클래스 파일과, 클래스들이 이용하는 관련 리소스 및 메타데이터를 하나의 파일로 모아서 자바 플랫폼에 응용 소프트웨어나 라이브러리를 배포하기 위한 소프트웨어 패키지 파일 포맷

- https://ko.wikipedia.org/wiki/JAR_(파일_포맷)

 

 


(1) [ Maven Project 에서 jar 배포 ]

 

[ 스프링 부트 maven Project 에서 jar 배포를 할때에는 아래 작업부터 선 진행함 ]

 1) pom.xml 수정

   1. properties 항목 확인하여 추가 수정

      *. jar 실행시 실행되는 첫 클래스 지정 : <start-class>

      *. 외부 추가 라이브러리 위치 : <webapp.lib>

<properties>
	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
	<java.version>1.8</java.version>
	<maven.compiler.source>1.8</maven.compiler.source>
	<maven.compiler.target>1.8</maven.compiler.target>
	<start-class>패키지위치를 포함한 시작클래스 위치 및 이름</start-class>
	<webapp.lib>${basedir}/src/lib</webapp.lib>
</properties>

 

 

1. 기본 빌드 배포 환경 만들어 놓기

프로젝트에서 우클릭 > Project Structure 선택
Arifacts > + 버튼 클릭 > JAR > From modules..... 선택

*. artifact 는 사전적으로 "인공물" 이라는 뜻이 있는데..아무래도 프로젝트의 결과물은 하나의 "산출물"을 만들어내는 동작이기때문에 artifact 라는 단어를 사용하지 않았을까 싶다. 

 

 

2. 이후부터는 여기서부터 계속 반복하여 배포 가능

메뉴 > Build > Build Artifacts 클릭
jar > Build 클릭

 

*. 배포 jar 위치

out > artifacts > 이후 프로젝트명~

 

 


(2) [ Gradle Project 에서 jar 배포 ]

 1. 빌드 옵션 일부 수정

  -  인텔리j의 우측 [Gradle] 에서 프로젝트 > Tasks > build > jar 를 따라가서 우클릭

-  Arguments 에 Flume Home 디렉토리 경로/lib/*을 넣는다 ( 이 내용은 빼도 되는지 아닌지 확인중)

*. 입력 : -cp /usr/local/Cellar/flume/1.9.0_1/libexec/lib/*

argu 설정

 - 빌드 : 창을 닫고 다시 jar 더블클릭

저 항목을 더블클릭하면 빌드가 시작된다.

 

*. 배포 jar 위치

- 정상 빌드 완료시 다음 위치에 2가지 버전으로 jar 파일들이 생성된다.  (외부라이브러리가 함께 들어있는 버전(-all), 단독 버전)

 

*. jar 실행 관련

- 자동 클래스 실행 : gradle 프로젝트로 내보낸 경우 아래와 같이 build.gradle 에서 attributes 'Main-Class'를 설정하였다면 으므로, jar 실행시 자동으로 해당 클래스를 최우선 실행 클래스로 실행한다.

jar { 
	finalizedBy shadowJar 
	manifest { 
    	attributes 'Main-Class': 'com.sentilab.MySink', 
        'Implementation-Title': 'MySink' 
    } 
    from { 
    	configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } 
    } 
}

- 수동으로 지정해서 특정 클래스 실행  : java -cp jar파일이름 패키지클래스명(또는 클래스명)

$ java -cp 이름.jar com.sentilab.MySink

728x90