Maven Lifecycle
pom.xml -> Project Object model
pom은 이름그대로 Project 객체의 모델정보를 담고있는 파일입니다.
장점
라이브러리 관리 : 메이븐 레파지토리를 동일하게 사용할 수 있어서 설정된 서버를 통하여 라이브러리를 다운로드 받아 모두 동일한 의존성을 가진 환경을 수정할 수 있다. 자신이 추가한 라이브러리도 레파지토리 서버에 올릴 수 있다.
프로젝트 관리 : 모든 프로젝트가 일관된 디렉토리 구조를 가지고 빌드 프로세스를 유지하도록 도와준다.
단위 테스트 시 의존성 관리 : junit 등을 사용하기 위해서 명시한다.
그리고 그래들이 메이븐보다 비교적 최신에 나왔기때문에 더 빠른 빌드와 성능을 보여준다고 합니다.
1) 모든 Gradle Script는 하나 이상의 project로 구성되며, 모든 프로젝트는 하나 이상의 task로 구성된다.
2) Gradle은 자바 6 버전 이상의 VM 환경에서 사용이 가능하며, 설치를 하거나 gradle wrapper를 이용하여 실행환경을 구성할 수 있다.
build.gradle이란 파일 자체가 Project 오브젝트 입니다. 이 Project오브젝트는 Project 인터페이스를 구현하는 구현체가 되고 Project 오브젝트는 Project 단위에서 필요한 작업을 수행하기 위해 모든 메서드와 프로퍼티를 모아놓은 슈퍼 객체이다.
Project 오브젝트는 내부에 수많은 메서드, 속성을 갖고 있다.
대표적인 것이 java application용 plugins, repositories, dependencies, application 메서드 이다.
Gradle Task를 이용해 java application을 빌드하면 build task는 이 메서드 들을 수행한다.
위그림에서 {} 로 감싸진 부분이 메서드의 인자로 받아들여지는 Grovy의 클로저Closure 다.
project.[프로퍼티명] = [값]
or
[프로퍼티명] = [값]
group = 'com.example'
project.group = "com.kotlinworld"
repositories {
println group
mavenCentral()
}
project.ext를 통해 extension에 접근한다.
project.ext.[커스텀 프로퍼티명] = [값]
project.ext에 넣어진 변수는 Groovy의 특수한 문법을 사용해 project 객체에서 직접 접근이 가능하다.
project.[커스텀 변수명]
ex )
project.ext.blogName = 'kotlin world'
repositories {
println project.blogName
mavenCentral()
}
settings.gradle
프로젝트 구성설정.(싱글프로젝트의 경우 생략 가능)
Gradle은 멀티 프로젝트를 구성하여 프로젝트 간의 의존성 및 서브프로젝트, 교차 프로젝트를 구성할 수 있다.
build.gradle : 빌드에 대한 모든 기능 정의
plugin은 미리 구성해 놓은 task들의 그룹이며, 특정 빌드 과정에 필요한 기본 정보를 포함하고, 필요에 따라 정보를 수정하여 목적에 맞게 사용할 수 있다.
spring initializer를 사용한 springboot 기본 프로젝트 생성에 따른 gradle 설정
plugins {
id 'org.springframework.boot' version '2.3.0.RELEASE'
id 'io.spring.dependency-management' version '1.0.9.RELEASE'
id 'java'
}
// project info
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
다양한 저장소 지원
repositories {
mavenLocal() // maven 로컬캐시 저장소
mavenCentral() // maven 중앙저장소
maven { url "http://repo.company.com/maven" } // maven 원격저장소
}
Gradle은 java의 의존성 관리를 위해 다양한 '구성'을 제공하고 있다.
1. implementation : 프로젝트 컴파일 과정에서 필요한 라이브러리.
2. providedCompile : compile 시에는 필요하지만, 배포시에 제외될 dependency를 설정한다.
(war plugin이 설정된 경우에만 사용 가능 하다)
3. providedRuntime : runtime 시에만 필요하고, 실행환경에서 제공되는 dependency를 설정한다.
(war plugin이 설정된 경우에만 사용 가능 하다)
4. testImplementation : test 시에 필요한 dependency 관리.
의존관계는 group, name, version 순으로 의존성을 기술한다.
1) Gradle은 Test 시에 특정 테스트만 진행할 수도 있음.
2) 테스트의 결과를 따로 받아볼 수도 있음.
3) 테스트를 detection 하고 그룹화 하여 테스트 진행할 수 있도록 도움을 주고 있음.
아래 코드를 사용해서 jUnit5를 사용할 수 있다. 위 springboot starter test를 통해 dependency가 주입되어 테스트가 가능하다.
test {
useJUnitPlatform()
}
여러 모듈이 포함된 Android 프로젝트의 경우, 프로젝트 수준에서 특정 속성을 정의하고 이러한 속성을 모든 모듈에서 공유하는 것이 유용할 수도 있습니다.
이를 위해 최상위 build.gradle 파일의 ext 블록에 추가 속성을 추가하면 됩니다.
buildscript {
ext {
queryDslVersion = "5.0.0"
}
}