[SpringBoot] build.gradle[1/2]

김인겸·2022년 8월 19일
1
post-thumbnail

IntelliJ에서 프로젝트를 생성할 때 Build system으로 gradle을 선택하면 build.gradle 파일이 자동 생성된다.

📂build.gradle

build.gradle은 파일 자체가 Project Object이다.

여기서 말하는 Project Object는 Project Interface를 구현하는 구현체인데, Project 단위에서 필요한 작업을 수행하기 위해 모든 메서드와 프로퍼티를 모아놓은 슈퍼 객체이다.

public interface Project extends Comparable<Project>, ExtensionAware, PluginAware{
	...
}

우리가 build.gradle에 작성하는 수 많은 코드들은 모두 Project Object의 프로퍼티와 메서드가 되며, Project Object는 Project 이름부터 변수, 메서드를 모두 포함하는 객체가 된다.

Project 오브젝트는 내부에 수 많은 메서드(Methods)와 속성(Properties)을 가지고 있다.
메서드 중에 대표적인 것은 java application용 build.gradle이 가진 plugins, repositories, dependencies, application 메서드이다.

우리가 Gradle Task를 이용해 java application을 빌드하게 되면 build task는 이 메서드들을 수행시킨다.

plugins{ // method of project object
	id 'application'
}

repositories{ // method of project object
	mavenCentral()
}

dependencies{ // method of project object
	testImplementation 'junit:junit:4.13.2'
    implementation 'com.google.guava:guava:30.1.1-jre'
}

application{ // method of project object
	mainClass = 'JavaProject.App'
}

위에서 {}으로 감싸여진 부분은 메서드의 인자로 받아지는 Groovy의 클로저(Closure)인데, Groovy의 클로저는 Java나 Kotilin의 람다와 같다.

따라서 {} 블록 내부의 메서드들은 아래 사진과 같이 메서드의 인자로 넘겨질 수도 있다.

plugins({
	id 'application'
})

repositories({
	mavenCentral()
})

dependencies({
	testImplementation 'junit:junit:4.13.2'
    implementation 'com.google.guava:guava:30.1.1-jre'
})

application({ 
	mainClass = 'JavaProject.App'
})

즉 앞서 두 개의 코드는 같은 코드이다.


📝build.gradle의 프로퍼티

build.gradle에는 Project 객체를 위한 프로퍼티를 정의할 수 있다.

프로퍼티를 정의하는 것은 간단하다. 아무 곳에서나 다음 문법을 사용하면 된다.

project.[프로퍼티명] = [값]

혹은 project를 생략하고 쓸 수도 있다.

[프로퍼티명] = [값]

예를 들어 Project 객체의 group을 재정의 하고 싶다고 하면 다음과 같이 쓰면 된다.
여기서 [group = project.group]은 동일한 의미를 갖는다.

group = 'com.example'
project.group = 'com.springweb'

repositories{
	println group // 출력 com.springweb
    mavenCentral()
}

하지만 이렇게 지정하는 것은 Project 객체에 미리 정의된 프로퍼티만 정의하는 것이 가능하다. 직접 프로퍼티를 만들려면 다른 방법을 사용해야 한다.


📝커스텀 프로퍼티 만들기

커스텀 프로퍼티를 만들기 위해서는 project 객체의 extension을 넣는 방식을 사용한다.
아래 코드는 porject.ext를 통해 extension에 접근한다.

project.ext.[커스텀 프로퍼티명] = [값]

project.ext에 넣어진 변수는 Groovy의 특수한 문법을 사용해 project 객체에서 직접 접근이 가능하다.

project.[커스텀 변수명]

예를 들어 blogName이란 커스텀 프로퍼티를 설정한 다음 출력하기 위해서는 다음과 같이 사용할 수 있다.

project.ext.blogName = 'springweb'

repositories{
	println project.blogName // 출력 springweb
    mavenCentral()
}

📝build.gradle의 메서드

build.gradle에는 Project 객체를 위한 메서드를 정의할 수 있다. 대표적인 메서드들은 바로 build.gradle의 repositories 메서드와 dependencies 메서드이다.

repositories{
	mavenCentral()
}

dependencies{
	testImplementation "junit:junit:4.13.2"
    implementation "com.google.guava:guava:30.1.1-jre"
}

에 메서드들은 build.gradle 속에 메서드로 존재한다. 이 내부에 들어가는 Closure은 프로젝트가 빌드될 때 해당 메서드를 수행하는 task에 의해 수행된다.

위의 메서드들은 미리 빌드된 메서드들이다. 커스텀 메서드를 만들기 위해서는 메서드를 별도로 정의해야 한다.


📝커스텀 메서드 만들기

Groovy의 Lambda식인 Closure와 Gradle의 ext를 활용해 커스텀 메서드를 손쉽게 만들 수 있다.

ext.[메서드명] = { param1, param2 -> [메서드 바디]}

project.ext.[메서드명] = { param1, param2 -> [메서드 바디]}

예를 들어 blogName을 출력하는 커스텀 메서드를 만들고 싶다면 아래와 같다.

project.ext.getBlogName{
	return project.blogName
}

❗[참고 : 스프링부트와 AWS로 혼자 구현하는 웹 서비스, 이동욱 지음]

profile
자바 백엔드 개발자입니다.

2개의 댓글

comment-user-thumbnail
2022년 8월 21일

잘 보고 갑니다^^ 정리를 굉장히 잘 해두셨네용~

1개의 답글