IDE/IntelliJ

[IntelliJ] 실행 Jar 생성

youn12 2021. 4. 2. 17:15
✏️ Info.

- Intellij Ultimate 2020.3.3
- OpenJDK 1.8
- 인텔리제이 실행(Execute or Runnable) Jar 생성
+ 실행 jar에 아래 두 방법을 통해 추가된 lib를 생성된 jar에 포함시키는 방법
    1. Maven Dependency를 통한 Library 포함
    2. 외부 Directory의 jar 파일 포함

📋 List.

1. resources 디렉터리 생성
2. Artifacts 생성
3. Dependency, 외부 lib 추가
4. Build
5. 실행
6. 실패 시 오류


✔️ Content.

 

1. resources 디렉토리 생성

 

  • MANIFEST.MF가 작성 될 디렉터리
  • src/main/resources로 생성을 해야 MANIFEST에 작성한 MainClass가 읽힌다.

 


 

2. Artifacts 생성

 

 2.1.  Project Structure - Artifacts - Add(+ 버튼) - From modules with dependencies

 


 

2.2. 위의 생성된 폼에서 Main Class 영역을 눌러 실행시킬 main class를 등록한다

 


 

2.3 Directory for META-INF/MANIFEST.MF 가 src/main/java로 되는데 이를 src/main/resources 로 바꿔준다.

 

 

2.4. 이후 OK 버튼을 누르면 다음과 같이 jar가 구성된다. 

 


 

3. Dependency, 외부 lib 추가

 

Artifacts 생성 이후에 Dependency, 외부 디렉터리에 있는 Libary가 추가될 경우에는 Artifacts에 자동으로 추가되지 않기 때문에 별도로 추가를 해야 한다.

 

  • 예로 기존의 Artifacts에서 log4j Libarry를 추가했다.
  • 우측 Available Elments에는 Library가 잡히지만 실제 생성될 execute.jar에는 포함되지 않고 있다.

실행. jar에 포함시키기 위해 다음과 같이 진행한다.

 

  • Avaliable Elments에서 포함할 Library 우클릭
  • Extract into Output Root 클릭


위와 같이 execute.jar에 포함되는 것을 확인할 수 있다.

 


 

4. Build

 

  • 상단의 Build - Build Artifacts 클릭

 


  • Build 클릭


  • 2.4에서 지정된 Output directory 내 실행 jar가 생성된다.


 

5. 실행

 

  • 실제 MainClass Code
  • Libary가 제대로 적용되는지 PDFBox Library 인스턴스를 생성했었다.
  • Library가 제대로 적용되면 인스턴스 생성 로직을 지나 콘솔에서 Hello World를 볼 수 있다.
package org.example;

import org.apache.pdfbox.pdmodel.PDDocument;

public class App
{
    public static void main( String[] args )
    {
        PDDocument document = new PDDocument();
        System.out.println( "Hello World!" );
    }
}

  • IntelliJ - Terminal에서 실행
  • 실행 명령 
    • java -jar out/artifacts/execute_jar_jar/execute_jar.jar

 

성공

 


6. 실패 시 오류

 

  • 실행. jar에 lib이 포함되지 않았기 때문에 5. 실행 코드 -  인스턴스 생성 부분에서 NoClassDefFoundError 가 발생 

실행 실패