티스토리 뷰
[Gradle]
- Gradle은 일종의 빌드 도구
- 여기서 말하는 빌드란 개발한 소프트웨어가 제품으로 만들어지는 일련의 과정
- 컴파일, 테스트, 배포, 문서화 등의 작업을 포함하는 절차
- 이 때 빌드의 모든 과정을 자동으로 처리할 수 있도록 도와주는 것을 빌드 도구라고 함
- 최근 대세는 Gradle
- Groovy, DSL(Domain-Specific Languages, 도메인 특화 언어)
- Gradle은 groovy라는 JVM 기반의 동적 타이핑 언어를 통해 기술된다.
- Gradle은 groovy 문법 자체를 그대로 이용하지는 않고, 그루비 기반의 DSL을 사용
- DSL = 도메인 고유 언어 (기반이 되는 언어에서 파생되어 특정한 용도에 한정되어 각색한 언어)
- Gradle에 사용되는 언어는 그루비를 기반으로 작성된 Gradle DSL
[build.gradle]
- build.gradle은 gradle에서 빌드 작업에 필요한 기본 설정, 동작 등을 정의하는 파일
- build.gradle 파일 자체가 Project 클래스로, Project 인터페이스를 구현하는 구현체
- build.gradle에 작성하는 코드들은 모두 Project 오브젝트의 프로퍼티와 메서드가 되며 Project 오브젝트는 프로젝트 이름, 변수, 메서드를 모두 포함하는 객체가 된다.
- Project 오브젝트는 내부에 수많은 메서드(Methods)와 속성(Properties)을 가지고 있다. 메서드 중에 대표적인 것은 모든 java application용 build.gradle이 가진 plugins, repositories, dependencies, application 메서드이다. 우리가 Gradle Task를 이용해 java application을 빌드하게 되면 build task는 이 메서드들을 수행시킨다.
plugins
- 프로젝트 컴파일이나 jar 파일의 생성 작업들을 해주는 플러그인 지정
- 플러그인에는 빌드에 필요한 과정들을 task로 포함
- 빌드 시 필요한 모든 과정을 플러그인의 내부 task가 진행해줌
dependencies
- 의존성에 관한 설정을 관리하는 프로퍼티
- 프로젝트에서 필요한 라이브러리를 등록
- 여기에 필요한 라이브러리 등의 정보를 기술하면 그 라이브러리를 참조할 수 있음
- 라이브러리 지정 시 “그룹:이름:버전” 형태 사용
ext
- 이 블록은 gradle의 모든 task에서 사용할 수 있는 일종의 전역 변수를 선언하는 블록
- gradle 에서 지원하는 변수
- 이 변수를 이용하여 추가 속성을 정의할 수 있다.
- 추가 속성은 모든 모듈에 공유가 가능하다.
- 변수선언을 진행한 다음 진행해야 한다.
- 프로젝트 전체와 서브 프로젝트에서도 접근 가능하다.
- ext 메소드는 그 인자를 buildScript 에서 전역변수로 사용하기 위해 사용되는 메소드이다.
ext.javaVersion = '1.7' // 한개씩 선언
ext {
// 여러개 한꺼번에 선언
springVersion = '3.1.0.RELEASE'
emailNotification = 'build@master.org'
}
// 가변 Key, 가변 값 형태로 코드를 통해 프라퍼티를 추가할 때는 아래 방식을 사용한다.
project.ext['keyname'] = 'value'
def
- 변수에 형을 생략할 때 사용
- 형 지정을 생략할 때 def 키워드 이용
- def를 지정하는 것은 자바에서 Object 형을 지정한 것과 같음
- gradle 에서 지원하는 지역변수
- 해당 스크립트에서만 사용할 수 있다.
* 형 생략
String message = 'hi'
def message = 'hi'
Groovy는 def라는 키워드를 이용하여 모든 타입의 변수를 선언할 수 있습니다.
반대로 형을 지정하여 생성하는 방법도 가능합니다. 위 두줄의 코드는 같은 결과를 발생시킵니다.
buildscript
- 빌드하는 동안 필요한 처리들을 모아놓는 곳
sourceSets
- Gradle에서는 하나의 Source 디렉토리만 지원을 해줌 (src/main/java)
- sourceSets는 이러한 제약사항을 지원하기 위해 사용
- Java 소스와 리소스 파일의 논리적인 그룹
- 하나 이상의 Source 디렉토리를 Gradle에서 처리를 하기 위해 sourceSets 에 Source 디렉토리를 등록해주면 된다.
- 기본 프로젝트 레이아웃
- 통합 테스트를 위한 별도의 소스 디렉토리를 만들 경우
- 위의 경우 sourceSets 셋팅 (폴더가 새 소스세트의 이름과 일치하면 따로 명시할 필요 없음)
- 따로 명시할 경우 아래와 같음
**// 1. queryDsl version 정보 추가**
buildscript { **// 빌드 시**
ext {
**queryDslVersion = "5.0.0" // 빌드 시 전역변수 설정**
}
}
plugins {
id 'org.springframework.boot' version '2.6.3'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
**// 2. querydsl plugins 추가
id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"**
id 'java'
}
//...
dependencies { **// 멀티모듈에서 공통으로 사용될 의존성 추가**
**// 3. querydsl library dependencies 추가
implementation "com.querydsl:querydsl-jpa:${queryDslVersion}"
implementation "com.querydsl:querydsl-apt:${queryDslVersion}"**
//...
}
test {
useJUnitPlatform()
}
**/*
* queryDSL 설정 추가
*/
// querydsl에서 사용할 경로 설정
def querydslDir = "$buildDir/generated/querydsl"
// JPA 사용 여부와 사용할 경로를 설정
querydsl {
jpa = true
querydslSourcesDir = querydslDir
}
// build 시 사용할 sourceSet 추가
// IDE의 소스 폴더에 자동으로 넣어준다.
// 개발 환경에서 생성된 Q파일들을 사용할 수 있도록 generated 디렉토리를 sourceSet에 추가해주면 개발 코드에서 생성된 Q파일에 접근할 수 있습니다.
sourceSets {
main.java.srcDir querydslDir
}
// querydsl 컴파일시 사용할 옵션 설정
// Q파일을 생성해준다.
compileQuerydsl{
options.annotationProcessorPath = configurations.querydsl
}
// querydsl 이 compileClassPath 를 상속하도록 설정
// 컴파일이 될때 같이 수행
configurations {
compileOnly {
extendsFrom annotationProcessor
}
querydsl.extendsFrom compileClasspath
}**
댓글
- Total
최근에 올라온 글