Gradle

민지킴·2021년 3월 27일
0

Gradle 이란?

Gradle은 Groovy를 이용한 빌드 자동화 시스템이다. Groovy와 유사한 도메인 언어를 채용하였으며, 현재 안드로이드 앱을 만드는데 필요한 안드로이드 스튜디오의 공식 빌드 시스템이기도 하다. Java, C/C++, 파이썬 등과 같은 여러 가지 언어를 지원한다.

특징

  • Gradle 은 JVM 기반의 빌드 도구로 기존의 Ant와 Maven을 보완하였다. 따라서 JAVA 혹은 Groovy를 이용해 로직을 개발자의 의도에 따라 설계할 수 있다.

  • 오픈소스 기반의 빌드 자동화 시스템으로 Groovy 기반 DSL(Domain-Specific Language)로 작성

  • Build-by-convention을 바탕으로 한다. 따라서 스크립트 규모가 작고 읽기 쉬움
    Multi 프로젝트 빌드를 지원하기 위해 설계됐다.

  • 설정 주입 방식(Configuration Injection)

  • Maven, Ivy등의 기존 저장소 인프라 또는 pom.xml 파일과 ivy.xml 파일에 대한 migration의 편이성 제공

  • 멀티 프로젝트 빌드 지원.

  • Build script를 xml이 아닌 Groovy 기반의 DSL(Domain Specific Language)을 사용

  • 기존 Build를 구성하기 위한 풍부한 도메인 모델 제공.

  • Gradle 설치 없이 Gradle Wrapper를 이용하여 빌드 지원

장점

Ant, Maven과 같은 기존의 빌드툴은 xml형식을 이용하여 정적인 설정정보를 구성했다.
Gradle은 Groovy라는 언어를 이용하여 코드로서 설정정보를 구성하기 때문에 구조적인 장점이 있다.

xml의 구조적인 틀을 벗어나 코딩에 의한 간결한 정의가 가능하다.
프로젝트를 설정주입방식으로 정의하기 때문에 maven의 상속 구조보다 재사용에 용이하다.

Gradle Vs Maven

링크

추가 설명 링크

링크

Gradle 예시

plugins { 
	id 'java'
} 

group 'com.jojoldu.book' 
version '1.0-SNAPSHOT' 

sourceCompatibility = 1.8 

repository { 
	mavenCenteral()
} 

dependencies { 
	testCompile group: 'junit', name: 'junit', version: '4.12'
}

와 같은 형태가 기본형태이다.

개발을 진행하다가 아래 처럼 추가하게 된다.

buildscript {
    ext {
        springBootVersion = '2.1.7.RELEASE'
    }
    repositories {
        mavenCentral()
        jcenter()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

group 'com.jojoldu.book'
version '1.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    compile('org.springframework.boot:spring-boot-starter-web')
    testCompile('org.springframework.boot:spring-boot-starter-test')
}

buildscript 메소드

빌드 스크립트 자체를 빌드하는 과정에서 필요한 외부 라이브러리를 클래스패스에 추가하는 기능을 한다. 중괄호로 묶은 내용(closure)을 ScriptHandler로 전달한다. ScriptHandler는 클로저를 인자로 받는 두 개의 메소드(repositories와 dependencies)를 갖고 있다. 빌드 스크립트에서 클래스패스를 추가할 경우에는 구성(configuration) 이름으로 classpath 문자열이 필요하다.

repositories 메소드

저장소 설정을 담당한다. 클로저 내용은 RepositoryHandler를 통해 실행된다. RepositoryHandler는 메이븐 중앙 저장소 추가를 위한mavenCentral 메소드와 Bintray의 jCenter 저장소 추가를 위한 jcenter 메소드를 제공한다.

ext 메소드

ext 메소드는 그 인자를 buildScript 에서 전역변수로 사용하기 위해 사용되는 메소드이다.

dependencies 메소드

Gradle은 Maven과 Ivy를 지원한다.
이행적 의존성이 아닌 일반 파일로 저장된 외부 라이브러리도 지원한다.
빌드 스크립트에서 직접 의존성을 지정한다.


sourceCompatibility 란?

group 'com.jojoldu.book'
version '1.0.1-SNAPSHOT'
sourceCompatibility = 1.8

group 은 프로젝트 생성시의 groupId를 말하며, version 은 애플리케이션의 버전이다. 접미사로 SNAPSHOT이 붙으면 아직 개발단계라는 의미이다.

sourceCompatibility라는 단어에서 알 수 있듯이, 이것은 자바소스를 컴파일시키는 역할을 한다. 따라서 뒤에 붙은 숫자 1.8은 자바버전을 의미한다. 그런데 찾아보니 sourceCompatibility가 있고 targetCompatibility가 있다.

간단하게 말해서 sourceCompatibility는 자바버전 1.6 이상에서 사용하는 컴파일 메소드고 targetCompatibility는 1.5 이하에서 사용하는 컴파일메소드다.

그런데 여기서 주의해야 할 점이 있는데, sourceCompatibility로 1.5 이하에서만 사용하는 메소드를 컴파일 한다고 해서 VM에서 이것을 실행시키지 못하는 것은 아니다. (다만 MethodNotFoundException이나 ClassNotFoundException 에러가 찍힌다)

dependencies 메소드의 compile과 testcompile

compile 은 dependencies의 메소드 중 하나로 말그대로 애플리케이션을 빌드하기 위해 사용하는 메소드이다. testcompile 은 오로지 테스트를 위한 메소드이다. 따라서 spring-boot-starter-test 는 런타임 과정을 필요치 않기에, 릴리즈된 패키지를 포함하지 않는다. (오직 테스트 도구로만 사용된다는 것)

profile
하루하루는 성실하게 인생 전체는 되는대로

0개의 댓글

관련 채용 정보