교재 실습/자바 웹 개발 워크북

128. Gradle 빌드 파일 분석 (1)

Jint 2022. 10. 11. 23:25

이번 절에서는 우리가 생성한 프로젝트에 있는 Gradle 빌드 스크립트 파일(build.gradle)의 내용을 하나씩 분석해 본다.

(교재의 build.gradle 파일을 예제로 분석한다)

 

1. Gradle 플러그인이란?

Gradle 플러그인은 자주 사용할 만한 빌드 명령어를 미리 작성하여 묶어 놓은 일종의 라이브러리 이다. 자바로 비교하자면 유틸리티 클래스라 할 수 있다. 자바의 Math 클래스에는 수학 연산에 관한 다양한 메서드가 있다. Gradle 플러그인에도 그 용도에 맞추어 다양한 빌드 명령어가 들어 있다. 따라서 작업 목적에 맞는 플러그인을 찾아 Gradle 빌드 파일에 적용하기만 하면 직접 복잡한 빌드 스크립트를 작성해야 하는 번거로움에서 벗어날 수 있다.

 

- build.gradle 코드 분석

apply plugin: 'java'
apply plugin: 'eclipse-wtp'
apply plugin: 'war'

빌드 스크립트 파일(build.gradle)의 첫 부분을 보면 'java'와 'eclipse' 플러그인을 추가하는 명령어가 있다. 우리가 생성한 프로젝트는 이클립스 자바 프로젝트이기 때문에 자바 소스를 컴파일하기 위해 'java' 플러그인을 추가하였고, 이클립스 웹 프로젝트 관련 파일을 다루기 위해 'eclipse-wtp'와 'war' 플러그인을 추가하였다.

 

2. Gradle Java 플러그인

Java 플러그인에는 자바 소스를 컴파일하고 테스트하는 작업과 관련된 명령어들이 들어 있다. 컴파일된 클래스 파일과 기타 참조 파일들을 묶어 JAR 파일을 생성하는 명령어도 들어 있다. Java 플러그인의 주요 기능을 살펴본다.

 

- Java 플러그인 사용

Java 플러그인을 사용하려면 빌드 스크립트 파일에 다음 명령어를 추가해야 한다.

apply plugin: 'java'

 

- 프로젝트 기본 폴더 구조

Java 플러그인이 인식하는 프로젝트의 기본 폴더 구조(default project layout)는 다음과 같다.

디렉토리 설명
src/main/java 자바 소스 파일을 두는 폴더
src/main/resources 프로그램 실행 중에 참조하는 기타 파일을 두는 폴더
src/test/java 단위 테스트를 위한 테스트 자바 소스 파일을 두는 폴더
src/test/resources 단위 테스트를 위한 테스트 관련 기타 파일을 두는 폴더

 

- sourceSets 속성

sourceSets 속성을 이용하면 프로젝트의 기본 폴더 구조를 변경하거나 자바 소스 폴더를 추가할 수 있다. 다음의 예제 코드는 자바 소스 폴더를 src/main/java에서 src/java로 변경하며 기타 파일을 두는 리소스 폴더도 기본 경로인 src/main/resources를 src/resources로 변경하고 있다.

sourceSets {
    main {
        java {
            srcDir 'src/java'
        }
        resources {
            srcDir 'src/resources'
        }
    }
}

 

- 주요 작업들

다음은 Java 플러그인으로 할 수 있는 작업 중에서 주요 작업을 정리한 표이다.

작업 이름 설명
compileJava javac를 사용하여 자바 소스 파일을 컴파일한다.
컴파일된 클래스 파일들은 build/classes/main 폴더에 둔다.
processResources 프로그램 실행 시에 참조하는 리소스 파일들을 build/resources/main 폴더로 복사한다.
classes 선행 작업 : compileJava → processResources
클래스 및 리소스 파일을 모은다.
compileTestJava 선행 작업 : compileJava → processResources → classes
javac를 사용하여 테스트 자바 소스 파일을 컴파일한다.
컴파일된 클래스 파일들은 build/classes/test 폴더에 둔다.
processTestResources 테스트 실행 시에 참조하는 리소스 파일들을 build/resources/test 폴더에 복사한다.
testClasses 선행 작업 : compileTestJava → processTestResources
테스트 클래스 및 테스트 리소스 파일을 모은다.
jar 선행 작업 : compileJava → processResources → classes
클래스 파일들과 리소스 파일들을 묶어 JAR 파일을 생성한다.
생성된 JAR 파일은 build/libs 폴더에 둔다.
javadoc 선행 작업 : compileJava → processResources → classes
javadoc을 사용하여 API 문서를 생성한다.
생성된 문서 파일들을 build/docs/javadoc 폴더에 둔다.
test 선행 작업 : compileJava → processResources → classes → compileTestJava → processTestResources → testClasses
JUnit 또는 TestNG를 사용하여 단위 테스트를 수행한다.
uploadArchives 선행 작업 : compileJava → processResources → classes → jar
로컬 또는 원격 저장소에 JAR 파일을 업로드 한다.
clean 빌드 폴더(build)를 삭제한다.
assemble 선행 작업 : compileJava → processResources → classes → jar
다른 아카이브 작업들이 있다면 모두 수행한다.
check 선행 작업 : compileJava → processResources → classes → compileTestJava → processTestResources → testClasses → test
다른 검증 작업들이 있다면 모두 수행한다.
build 선행 작업 : compileJava → processResources → classes → jar → assemble → compileTestJava → processTestResources → testClasses → test
프로젝트의 모든 빌드 작업을 수행한다.

 

- 주요 속성들

Java 플러그인이 작업을 수행할 때 참고하는 값들이 있다. 이 값들을 속성으로 정의하였는데, 다음은 자주 사용하는 주요 속성들을 정리한 표이다.

속성 이름 기본 값 (실제경로) 설명
buildDir build
($projectDir/build)
빌드 파일들을 보관할 폴더 이름.
version 없음
예) 1.0
빌드 버전을 지정. JAR 파일을 만들 때 사용됨.
예) Test-1.0.jar
reportsDirName reports
($buildDir/reports)
각종 보고서를 저장할 폴더 이름.
testReportsDirName tests
($buildDir/reports/tests)
테스트 결과 보고서를 저장할 폴더 이름.
libsDirName libs
($buildDir/libs)
라이브러리 파일을 저장할 폴더 이름.
docsDirName docs
($buildDir/docs)
생성된 문서를 저장할 폴더 이름.
sourceCompatibility 현재 사용하는 JVM 버전 자바 소스의 문법을 검사할 때 사용할 자바 버전.
targetCompatibility sourceCompatibility 값 클래스 파일을 만들 때 사용할 자바 버전.
클래스를 실행할 때는 이 속성에 지정한 값과 같은 버전 또는 상위 버전의 JVM이 필요함.

 

- build.gradle 코드 분석

sourceCompatibility = 1.7

자바 1.7 버전의 문법에 따라 자바 소스를 검사하고, 컴파일할 때도 JVM 1.7 이상에서만 실행할 수 있게 하라는 설정이다.

version = '1.0'

빌드 버전을 1.0으로 설정한다. JAR 파일을 생성할 때 파일명 뒤에 1.0이 붙을 것이다.

 

참고도서 : https://freelec.co.kr/book/1674/

 

[열혈강의] 자바 웹 개발 워크북

[열혈강의] 자바 웹 개발 워크북

freelec.co.kr