선생님, 개발을 잘하고 싶어요.

[Gradle] 그래들 활용해서 간단한 java 애플리케이션 만들기 본문

개발/gradle

[Gradle] 그래들 활용해서 간단한 java 애플리케이션 만들기

알고싶은 승민 2022. 9. 5. 20:32

이전 포스트 그래들 기본 컨셉의 이해 후속 포스팅입니다.

 

이번 포스팅을 잘 따라오려면 다음과 같은 걸 알고있으면 좋습니다.

  • 그래들 프로젝트, 빌드 스크립트, 테스크, 플러그인에 대한 이해
  • 자바 프로그램 컴파일에 대한 아주 최소한의 지식

이번 포스팅을 읽으면 좋은 대상은 다음과 같습니다.

  • 자바 프로젝트 생성하는데 ide의 도움 없이는 만들지 못하는 사람

 

이제 자바 애플리케이션 직접 만들며 각 컨셉이 어떻게 사용되는지 확인해봅시다.

 

그래들 프로젝트 준비하기

우선 그래들 프로젝트를 초기화합니다.

mkdir gradle-java-project # 폴더 생성
cd gradle-java-project # 폴더로 이동
gradle init # gradle project 생성

그래들 init 옵션은 전부 기본 값으로 설정해주세요. 우린 밑바닥부터 만듭니다 😉

java 플러그인 추가하기

자바 애플리케이션을 만들기 위해서 필요한 작업은 다음이 떠오릅니다.

  • 자바 코드를 컴파일해서 class 파일을 만들 것
  • class 파일을 패키징해서 jar 실행 파일을 만들 것

다행히도 이런 task는 java 플러그인에 이미 구현되어있습니다.

플러그인을 등록하려면 build.gradle에 다음 라인을 추가합니다.

plugins {
  id 'java'
}

standard java project layout

여기서 한가지 더 알아야 할 게, java 플러그인이 자바 프로젝트를 이해하는 방법을 알아야합니다.

java 플러그인은 java파일이 어디있는지 알고 컴파일할까요? 컴파일된 결과 class파일이 어디있는지 알고 jar 파일로 패키징할까요?

이런걸 project layout이라고 합니다. 우리는 표준 project layout에 맞춰서 코드를 작성하려고 합니다.

표준 project layout에서 우리에게 필요한 폴더는 다음과 같아요.

  • 자바 코드 위치 : src/main/java
  • 대응되는 build class 파일 위치 : **build/classes/java/main**

이에 따라서 자바 코드가 위치할 폴더를 만들어줍시다.

mkdir -p src/main/java

src/main/java 위치에 HelloWorld.java 파일을 다음과 같이 만들어주세요.

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("hello world");
    }
}

중간 점검 차 현재 폴더 구조는 다음과 같습니다.

compileJava, jar task

이제 준비가 다 됐습니다. 컴파일 해봅시다!

java 플러그인으로 추가된 테스크중 compileJava, jar 테스크를 사용할 예정입니다.

추가된 테스크를 사용해서 컴파일 해봅니다.

./gradlew compileJava

class 파일이 정상적으로 생성되었습니다.

이제 실행가능한 jar 파일로 만들어보죠.

./gradlew jar

build/libs/gradle-java-project.jar 가 생성된 것을 확인할 수 있습니다.

ls build/libs

# gradle-java-project.jar

jar task 설정하기

이제 java 커맨드로 jar 파일을 실행해볼까요?

java -jar build/libs/gradle-java-project.jar

# 에러!
# no main manifest attribute, in build/libs/gradle-java-project.jar

다음과 같은 에러를 내뿜으며 에러가 발생합니다.

Main Class가 무엇인지 지칭하지 않아서 발생하는 에러입니다. 다음과 같은 코드를 build.gradle에 작성해서 java 플러그인을 설정해주세요.

jar {
  manifest {
    attributes(
      'Main-Class': 'HelloWorld'
    )
  }
}

그 다음 다시 빌드해줍니다.

./gradlew compileJava
./gradlew jar
java -jar build/libs/gradle-java-project.jar

# hello world

hello world! 자바 프로젝트를 만들고 컴파일 하고 실행하는데 성공했습니다.

aggregate 테스크 사용하기 - assemble

빌드할 때 마다 저 두 테스크를 연달아 실행해야 한다면 불편할 것입니다.

📌 그래서 그래들은 테스크에 의존성을 연결하고 하나의 테스크만 실행하는 방법은 사용합니다.

java 플러그인이 제공하는 assemble 이라는 키워드가 그와 같은 일을 수행합니다.

정확히 어떤 테스크가 실행되고 있는지 확인하기 위해서 추가 옵션을 추가해 실행해봅니다.

./gradlew assemble --console=verbose

 

우리가 손수 했던 작업보다 복잡한 작업을 수행하고 있는 걸 확인 할 수 있습니다. 하지만 역시 compileJava, jar 테스크를 활용하고 있는 걸 확인할 수있죠.

마무리

이걸로 그래들을 사용할 때 가장 기본적인 핵심 컨셉 네가지를 알아보았습니다.

그래들 커맨드를 사용해서 그래플 프로젝트를 만들어 보았고 빌드 스크립트를 그루비를 사용해서 작성 해보았습니다. 나만의 테스크를 설정해보았고 이미 주어진 TaskClass를 설정해서 만들어보기도 했습니다.

플러그인을 적용해서 이미 정의된 테스크를 가저올 수 있게 되었고 우리 프로젝트 상황에 맞게 제공되는 테스크를 설정해야 한다는 사실을 알게되었습니다.

테스크 실행을 연달아서 하는 것 뿐 아니라 의존성이 연결된 하나의 테스크를 실행해서 원하는 결과를 달성하는 법도 배웠습니다.

Comments