SlideShare a Scribd company logo
1 of 25
Download to read offline
Gradle 한번살펴보기
Gradle 의등장
Java에서는 "빌드 도구"에 의한 프로젝트 관리가 보급되어 있
었습니다.
처음에는 확장성이 강력한 Apache Ant라는 빌드도구가
2000년에 등장하였고,
이후에는 설정이 편하고 중앙 저장소를 가진 Apache Maven
이라는 등장하였습니다.
사람들은 강력하지만 설정하기 어려운 Ant와 편리하지만 커스
터마이징하기 어려운 Maven 사이에서 아쉬움을 느꼈습니다.
2004년
아파치에서 Apache Ivy라는 새로운 빌드 도구를 선보였지만
시장의 반응은 좋지 못했습니다.
이후 3년 뒤
우리는 Gradle을 만나게 됩니다.
Gradle은 그루비 언어를 기반으로 쉽게 설정할 수 있으며 다양
한 기능을 추가할 수 있었고 자바 세상의 주류로 편입하게 됩니
다.
Gradle 의특징
간결함
Groovy라는 언어를 활용한 DSL을 스크립트로 사용한다.
Groovy라는 언어를 몰라도 Gradle 스크립트에 익숙해 질 수
있다.
속도
Gradle은 성능을 위해서 다양한 기능을 제공한다.
Gradle은 성능 향상을 위해서 증분 빌드, 작업 결과 캐싱, 증분
하위 작업, 데몬 프로세스 재사용, 별렬 실행, 병렬 다운로드 등
의 기능을 지원한다.
멀티프로젝트
Gradle은 멀티 프로젝트 구성이 가능하다. 하나의
Repository내에 여러개의 하위 프로젝트를 구성할 수 있다.
상위 프로젝트의 의존성 및 설정을 하위 프로젝트에서 상속받
아 사용할 수 있기 때문에 중복 설정이 불필요하다.
유연성+ 확장성
Groovy 기반 스크립팅을 통해서 다양한 기능을 스크립트안에
직접 구현할 수 있다.
직접 Task를 구현하고, 플로그인을 만들어서 기능을 추가할 수
도 있다.
기본설정
$ gradle init
project/
gradlew // 유닉스용 실행 스크립트.
gradlew.bat // 윈도우용 실행 배치 스크립트
gradle/wrapper/
gradle-wrapper.jar // gradlew 파일이 프로젝트 내에 설치하는 이 파
gradle-wrapper.properties // gradle wrapper 설정 파일
build.gradle // 읜존성이나 플러그인 설정 등을 위한 스크립트 파일
settings.gradle // 프로젝트의 구성 정보를 기록하는 파일
멀티프로젝트구성
기본적인 프로젝트 구조를 설정
// settings.gradle
rootProject.name = 'algorithm' // 최상위 프로젝트 이름
include 'java'
include 'kotlin'
$ mkdir java
$ mkdir kotlin
$ mkdir -p java/src/main/java
$ mkdir -p kotlin/src/main/kotlin
각 하위 폴더를 Gradle 프로젝트로 만들기
$ touch java/build.gradle
$ touch kotlin/build.gradle
최상위 프로젝트의 build.gradle 파일에 모든 하위 프로젝트
에 적용되는 공통 설정을 적용
subprojects {
group = 'gradle-study' // 생성될 아티팩트의 그룹명
repositories {
mavenCentral()
}
dependencies {
}
}
subprojects 내의 설정 값들은 모든 하위 프로젝트에 적용되
며
만약 최상위 프로젝트를 포함한 모든 하위 프로젝트에 공통적
으로 적용하고 싶다면
allprojects를 사용할 수 있다.
Java용프로젝트설정
// java/build.gradle
apply plugin: 'java' // 'java'라는 Gradle 플러그인 적용
sourceCompatibility = 1.8 // Java 호환 버전을 1.8로 설정
dependencies {
compile 'ch.qos.logback:logback-classic:1.2.3'
compile 'ch.qos.logback:logback-core:1.2.3'
testCompile 'junit:junit:4.12'
}
위 설정은 java 폴더 하위의 프로젝트에만 적용된다.
// java/src/main/java/HelloWorld.java
import java.util.Scanner;
class HelloWorld {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int cases = sc.nextInt();
for (int i = 0; i < cases; i++) {
String name = sc.next();
System.out.println("Hello, " + name + "!");
}
}
}
$ ./gradlew build
Kotlin용프로젝트설정
// kotlin/build.gradle
buildscript {
ext.kotlin_version = '1.1.2-4' // ext로 전역변수를 설정하여 사용
repositories {
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$ko
}
}
apply plugin: 'kotlin'
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_ver
}
buildscript내 classpath를 설정하여 해당 클래스 경로내의
클래스들을 사용할 수 있다.
import org.apache.commons.codec.binary.Base64
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'commons-codec:commons-codec:1.2'
}
}
task encode {
doLast {
def byte[] encodedString = new Base64().encode('hello wo
println new String(encodedString)
}
}
// kotlin/src/main/kotlin/HelloWorld.kt
import java.util.Scanner
fun main(args: Array<String>) {
val sc = Scanner(System.`in`)
val cases = sc.nextInt()
for (i in 0..cases - 1) {
val name = sc.next()
println("Hello, $name!")
}
}
$ ./gradlew build
Gradle 구조
프로젝트/settings.gradle
include ':app'
include ':lpin-android-sdk-env'
include ':lpin-android-sdk'
빌드하고자 하는 모듈 정의
프로젝트/build.gradle
프로젝트 gradle 설정(repository, plugin, ...)
buildscript {
ext.kotlin_version = '1.3.41'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.3.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$ko
}
}
프로젝트/모듈/build.gradle
어플리케이션에서 사용할 패키지 설정
implementation project(':모듈명') // 같은 프로젝트 모듈 의존
implementation '저장소 명' // 외부 저장소로부터 의존
implementation files('파일명') // 같은 모듈 내 라이브러리 파일 의존
Gradle 스크립트의이해
Gradle 스크립트는 Groovy를 사용해서 만든 DSL이다.
모든 Gradle 스크립트는 두가지 개념으로 구성되어 있는데
projects와 tasks 이다.
모든 Gradle 빌드는 하나 시상의 projects로 구성된다. 그리
고 각 projects는 하나 이상의 tasks들로 구성되어있다.
이 task는 어떤 클래스를 컴파일하거나 JAR를 생성하거나
javadoc을 만드는 작업들을 의미한다.
task hello {
doLast {
println 'Hello World'
}
}
간단한 hello task를 위와 같이 만들 수 있다.
$ gradle -q hello
로 해당 task만 실행해 볼 수도 있다.
task hello {
doLast {
println 'Hello world!'
}
}
task intro(dependsOn: hello) {
doLast {
println "I'm Gradle"
}
}
dependsOn을 사용해서 task간의 의존성을 만들 수 있다. 위
예제의 경우 intro task를 실행하면 먼저 hello가 실행되고
intro가 실행된다.
Q/A
참고
https://medium.com/@goinhacker/운영-자동화-1-빌
드-자동화-by-gradle-7630c0993d09
https://brunch.co.kr/@yudong/67
https://araikuma.tistory.com/463?
category=782572
끝

More Related Content

What's hot

Backend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build Lifecycle
Backend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build LifecycleBackend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build Lifecycle
Backend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build LifecycleKyunghun Jeon
 
Java Build Tool
Java Build ToolJava Build Tool
Java Build Tool용근 권
 
빠르고 지속적으로 전달하기: Continuous Delivery for Android
빠르고 지속적으로 전달하기: Continuous Delivery for Android빠르고 지속적으로 전달하기: Continuous Delivery for Android
빠르고 지속적으로 전달하기: Continuous Delivery for AndroidSangkyoon Nam
 
우아한테크세미나-우아한멀티모듈
우아한테크세미나-우아한멀티모듈우아한테크세미나-우아한멀티모듈
우아한테크세미나-우아한멀티모듈용근 권
 
Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발지수 윤
 
ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자Sewon Ann
 
자바 웹프로젝트 개발환경 셋팅
자바 웹프로젝트 개발환경 셋팅자바 웹프로젝트 개발환경 셋팅
자바 웹프로젝트 개발환경 셋팅Yoonsung Jung
 
소프트웨어 개선 그룹(Sig) 개발 원칙
소프트웨어 개선 그룹(Sig) 개발 원칙소프트웨어 개선 그룹(Sig) 개발 원칙
소프트웨어 개선 그룹(Sig) 개발 원칙Hong Hyo Sang
 
N02 app engineseminar
N02 app engineseminarN02 app engineseminar
N02 app engineseminarSun-Jin Jang
 
[H3 2012] 앱(APP) 중심으로 생각하기 - DevOps와 자동화
[H3 2012] 앱(APP) 중심으로 생각하기 - DevOps와 자동화[H3 2012] 앱(APP) 중심으로 생각하기 - DevOps와 자동화
[H3 2012] 앱(APP) 중심으로 생각하기 - DevOps와 자동화KTH, 케이티하이텔
 
kubernetes : From beginner to Advanced
kubernetes : From beginner to Advancedkubernetes : From beginner to Advanced
kubernetes : From beginner to AdvancedInho Kang
 
iOS App 개발 with React Native + ClojureScript
iOS App 개발 with React Native + ClojureScriptiOS App 개발 with React Native + ClojureScript
iOS App 개발 with React Native + ClojureScriptCheolhee Han
 
[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱NAVER D2
 
올챙이로 살펴보는 개발툴과 Cloud
올챙이로 살펴보는 개발툴과 Cloud올챙이로 살펴보는 개발툴과 Cloud
올챙이로 살펴보는 개발툴과 Cloudcho hyun jong
 
빌드교육자료 작성중
빌드교육자료 작성중빌드교육자료 작성중
빌드교육자료 작성중Sukjin Yun
 
지속적인 통합
지속적인 통합지속적인 통합
지속적인 통합중선 곽
 
올챙이로 살펴보는 Eclipse개발
올챙이로 살펴보는 Eclipse개발올챙이로 살펴보는 Eclipse개발
올챙이로 살펴보는 Eclipse개발cho hyun jong
 
JBoss Modules Internal
JBoss Modules InternalJBoss Modules Internal
JBoss Modules InternalTed Won
 

What's hot (20)

Backend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build Lifecycle
Backend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build LifecycleBackend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build Lifecycle
Backend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build Lifecycle
 
Java Build Tool
Java Build ToolJava Build Tool
Java Build Tool
 
빠르고 지속적으로 전달하기: Continuous Delivery for Android
빠르고 지속적으로 전달하기: Continuous Delivery for Android빠르고 지속적으로 전달하기: Continuous Delivery for Android
빠르고 지속적으로 전달하기: Continuous Delivery for Android
 
우아한테크세미나-우아한멀티모듈
우아한테크세미나-우아한멀티모듈우아한테크세미나-우아한멀티모듈
우아한테크세미나-우아한멀티모듈
 
Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발
 
ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자
 
자바 웹프로젝트 개발환경 셋팅
자바 웹프로젝트 개발환경 셋팅자바 웹프로젝트 개발환경 셋팅
자바 웹프로젝트 개발환경 셋팅
 
Cygnus unit test
Cygnus unit testCygnus unit test
Cygnus unit test
 
소프트웨어 개선 그룹(Sig) 개발 원칙
소프트웨어 개선 그룹(Sig) 개발 원칙소프트웨어 개선 그룹(Sig) 개발 원칙
소프트웨어 개선 그룹(Sig) 개발 원칙
 
N02 app engineseminar
N02 app engineseminarN02 app engineseminar
N02 app engineseminar
 
Angular Library
Angular LibraryAngular Library
Angular Library
 
[H3 2012] 앱(APP) 중심으로 생각하기 - DevOps와 자동화
[H3 2012] 앱(APP) 중심으로 생각하기 - DevOps와 자동화[H3 2012] 앱(APP) 중심으로 생각하기 - DevOps와 자동화
[H3 2012] 앱(APP) 중심으로 생각하기 - DevOps와 자동화
 
kubernetes : From beginner to Advanced
kubernetes : From beginner to Advancedkubernetes : From beginner to Advanced
kubernetes : From beginner to Advanced
 
iOS App 개발 with React Native + ClojureScript
iOS App 개발 with React Native + ClojureScriptiOS App 개발 with React Native + ClojureScript
iOS App 개발 with React Native + ClojureScript
 
[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱
 
올챙이로 살펴보는 개발툴과 Cloud
올챙이로 살펴보는 개발툴과 Cloud올챙이로 살펴보는 개발툴과 Cloud
올챙이로 살펴보는 개발툴과 Cloud
 
빌드교육자료 작성중
빌드교육자료 작성중빌드교육자료 작성중
빌드교육자료 작성중
 
지속적인 통합
지속적인 통합지속적인 통합
지속적인 통합
 
올챙이로 살펴보는 Eclipse개발
올챙이로 살펴보는 Eclipse개발올챙이로 살펴보는 Eclipse개발
올챙이로 살펴보는 Eclipse개발
 
JBoss Modules Internal
JBoss Modules InternalJBoss Modules Internal
JBoss Modules Internal
 

Similar to Gradle 한번 살펴보기

[세미나] 20160520 Gradle
[세미나] 20160520 Gradle[세미나] 20160520 Gradle
[세미나] 20160520 GradleSanghoon Yoon
 
자바9 특징 (Java9 Features)
자바9 특징 (Java9 Features)자바9 특징 (Java9 Features)
자바9 특징 (Java9 Features)Chang-Hwan Han
 
Spring boot-summary(part2-part3)
Spring boot-summary(part2-part3)Spring boot-summary(part2-part3)
Spring boot-summary(part2-part3)Jaesup Kwak
 
Java9 특징 훑어보기
Java9 특징 훑어보기Java9 특징 훑어보기
Java9 특징 훑어보기duriepark 유현석
 
Front end dev 2016 & beyond
Front end dev 2016 & beyondFront end dev 2016 & beyond
Front end dev 2016 & beyondJae Sung Park
 
안드로이드를 위한 Gradle 맛들이기
안드로이드를 위한 Gradle 맛들이기안드로이드를 위한 Gradle 맛들이기
안드로이드를 위한 Gradle 맛들이기DongHwan Yu
 
DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기SeungYong Baek
 
Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기
Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기
Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기Nanha Park
 
올챙이 현재와 미래
올챙이 현재와 미래올챙이 현재와 미래
올챙이 현재와 미래cho hyun jong
 
Single-page Application
Single-page ApplicationSingle-page Application
Single-page ApplicationSangmin Yoon
 
GAE 위에서 DJANGO 사용하기
GAE 위에서 DJANGO 사용하기GAE 위에서 DJANGO 사용하기
GAE 위에서 DJANGO 사용하기Tae-lim Oh
 
01.개발환경 교육교재
01.개발환경 교육교재01.개발환경 교육교재
01.개발환경 교육교재Hankyo
 
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Javajigi Jaesung
 

Similar to Gradle 한번 살펴보기 (20)

Gradle 소개
Gradle 소개Gradle 소개
Gradle 소개
 
[세미나] 20160520 Gradle
[세미나] 20160520 Gradle[세미나] 20160520 Gradle
[세미나] 20160520 Gradle
 
자바9 특징 (Java9 Features)
자바9 특징 (Java9 Features)자바9 특징 (Java9 Features)
자바9 특징 (Java9 Features)
 
Spring boot-summary(part2-part3)
Spring boot-summary(part2-part3)Spring boot-summary(part2-part3)
Spring boot-summary(part2-part3)
 
Java9 특징 훑어보기
Java9 특징 훑어보기Java9 특징 훑어보기
Java9 특징 훑어보기
 
Front end dev 2016 & beyond
Front end dev 2016 & beyondFront end dev 2016 & beyond
Front end dev 2016 & beyond
 
안드로이드를 위한 Gradle 맛들이기
안드로이드를 위한 Gradle 맛들이기안드로이드를 위한 Gradle 맛들이기
안드로이드를 위한 Gradle 맛들이기
 
[H3 2012] 꽃보다 Scala
[H3 2012] 꽃보다 Scala[H3 2012] 꽃보다 Scala
[H3 2012] 꽃보다 Scala
 
DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기
 
Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기
Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기
Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기
 
Gradle guide
Gradle guideGradle guide
Gradle guide
 
올챙이 현재와 미래
올챙이 현재와 미래올챙이 현재와 미래
올챙이 현재와 미래
 
Single-page Application
Single-page ApplicationSingle-page Application
Single-page Application
 
GAE 위에서 DJANGO 사용하기
GAE 위에서 DJANGO 사용하기GAE 위에서 DJANGO 사용하기
GAE 위에서 DJANGO 사용하기
 
WIPI.ppt
WIPI.pptWIPI.ppt
WIPI.ppt
 
01.개발환경 교육교재
01.개발환경 교육교재01.개발환경 교육교재
01.개발환경 교육교재
 
요즘웹개발
요즘웹개발요즘웹개발
요즘웹개발
 
okspring3x
okspring3xokspring3x
okspring3x
 
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
 
Serverless 101
Serverless 101Serverless 101
Serverless 101
 

Gradle 한번 살펴보기

  • 2. Gradle 의등장 Java에서는 "빌드 도구"에 의한 프로젝트 관리가 보급되어 있 었습니다. 처음에는 확장성이 강력한 Apache Ant라는 빌드도구가 2000년에 등장하였고, 이후에는 설정이 편하고 중앙 저장소를 가진 Apache Maven 이라는 등장하였습니다. 사람들은 강력하지만 설정하기 어려운 Ant와 편리하지만 커스 터마이징하기 어려운 Maven 사이에서 아쉬움을 느꼈습니다.
  • 3. 2004년 아파치에서 Apache Ivy라는 새로운 빌드 도구를 선보였지만 시장의 반응은 좋지 못했습니다. 이후 3년 뒤 우리는 Gradle을 만나게 됩니다. Gradle은 그루비 언어를 기반으로 쉽게 설정할 수 있으며 다양 한 기능을 추가할 수 있었고 자바 세상의 주류로 편입하게 됩니 다.
  • 5. 간결함 Groovy라는 언어를 활용한 DSL을 스크립트로 사용한다. Groovy라는 언어를 몰라도 Gradle 스크립트에 익숙해 질 수 있다. 속도 Gradle은 성능을 위해서 다양한 기능을 제공한다. Gradle은 성능 향상을 위해서 증분 빌드, 작업 결과 캐싱, 증분 하위 작업, 데몬 프로세스 재사용, 별렬 실행, 병렬 다운로드 등 의 기능을 지원한다.
  • 6. 멀티프로젝트 Gradle은 멀티 프로젝트 구성이 가능하다. 하나의 Repository내에 여러개의 하위 프로젝트를 구성할 수 있다. 상위 프로젝트의 의존성 및 설정을 하위 프로젝트에서 상속받 아 사용할 수 있기 때문에 중복 설정이 불필요하다. 유연성+ 확장성 Groovy 기반 스크립팅을 통해서 다양한 기능을 스크립트안에 직접 구현할 수 있다. 직접 Task를 구현하고, 플로그인을 만들어서 기능을 추가할 수 도 있다.
  • 7. 기본설정 $ gradle init project/ gradlew // 유닉스용 실행 스크립트. gradlew.bat // 윈도우용 실행 배치 스크립트 gradle/wrapper/ gradle-wrapper.jar // gradlew 파일이 프로젝트 내에 설치하는 이 파 gradle-wrapper.properties // gradle wrapper 설정 파일 build.gradle // 읜존성이나 플러그인 설정 등을 위한 스크립트 파일 settings.gradle // 프로젝트의 구성 정보를 기록하는 파일
  • 8. 멀티프로젝트구성 기본적인 프로젝트 구조를 설정 // settings.gradle rootProject.name = 'algorithm' // 최상위 프로젝트 이름 include 'java' include 'kotlin' $ mkdir java $ mkdir kotlin $ mkdir -p java/src/main/java $ mkdir -p kotlin/src/main/kotlin
  • 9. 각 하위 폴더를 Gradle 프로젝트로 만들기 $ touch java/build.gradle $ touch kotlin/build.gradle 최상위 프로젝트의 build.gradle 파일에 모든 하위 프로젝트 에 적용되는 공통 설정을 적용 subprojects { group = 'gradle-study' // 생성될 아티팩트의 그룹명 repositories { mavenCentral() } dependencies { } }
  • 10. subprojects 내의 설정 값들은 모든 하위 프로젝트에 적용되 며 만약 최상위 프로젝트를 포함한 모든 하위 프로젝트에 공통적 으로 적용하고 싶다면 allprojects를 사용할 수 있다.
  • 11. Java용프로젝트설정 // java/build.gradle apply plugin: 'java' // 'java'라는 Gradle 플러그인 적용 sourceCompatibility = 1.8 // Java 호환 버전을 1.8로 설정 dependencies { compile 'ch.qos.logback:logback-classic:1.2.3' compile 'ch.qos.logback:logback-core:1.2.3' testCompile 'junit:junit:4.12' } 위 설정은 java 폴더 하위의 프로젝트에만 적용된다.
  • 12. // java/src/main/java/HelloWorld.java import java.util.Scanner; class HelloWorld { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int cases = sc.nextInt(); for (int i = 0; i < cases; i++) { String name = sc.next(); System.out.println("Hello, " + name + "!"); } } } $ ./gradlew build
  • 13. Kotlin용프로젝트설정 // kotlin/build.gradle buildscript { ext.kotlin_version = '1.1.2-4' // ext로 전역변수를 설정하여 사용 repositories { mavenCentral() } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$ko } } apply plugin: 'kotlin' dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_ver }
  • 14. buildscript내 classpath를 설정하여 해당 클래스 경로내의 클래스들을 사용할 수 있다. import org.apache.commons.codec.binary.Base64 buildscript { repositories { mavenCentral() } dependencies { classpath 'commons-codec:commons-codec:1.2' } } task encode { doLast { def byte[] encodedString = new Base64().encode('hello wo println new String(encodedString) } }
  • 15. // kotlin/src/main/kotlin/HelloWorld.kt import java.util.Scanner fun main(args: Array<String>) { val sc = Scanner(System.`in`) val cases = sc.nextInt() for (i in 0..cases - 1) { val name = sc.next() println("Hello, $name!") } } $ ./gradlew build
  • 17. 프로젝트/settings.gradle include ':app' include ':lpin-android-sdk-env' include ':lpin-android-sdk' 빌드하고자 하는 모듈 정의
  • 18. 프로젝트/build.gradle 프로젝트 gradle 설정(repository, plugin, ...) buildscript { ext.kotlin_version = '1.3.41' repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.3.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$ko } }
  • 19. 프로젝트/모듈/build.gradle 어플리케이션에서 사용할 패키지 설정 implementation project(':모듈명') // 같은 프로젝트 모듈 의존 implementation '저장소 명' // 외부 저장소로부터 의존 implementation files('파일명') // 같은 모듈 내 라이브러리 파일 의존
  • 20. Gradle 스크립트의이해 Gradle 스크립트는 Groovy를 사용해서 만든 DSL이다. 모든 Gradle 스크립트는 두가지 개념으로 구성되어 있는데 projects와 tasks 이다. 모든 Gradle 빌드는 하나 시상의 projects로 구성된다. 그리 고 각 projects는 하나 이상의 tasks들로 구성되어있다. 이 task는 어떤 클래스를 컴파일하거나 JAR를 생성하거나 javadoc을 만드는 작업들을 의미한다.
  • 21. task hello { doLast { println 'Hello World' } } 간단한 hello task를 위와 같이 만들 수 있다. $ gradle -q hello 로 해당 task만 실행해 볼 수도 있다.
  • 22. task hello { doLast { println 'Hello world!' } } task intro(dependsOn: hello) { doLast { println "I'm Gradle" } } dependsOn을 사용해서 task간의 의존성을 만들 수 있다. 위 예제의 경우 intro task를 실행하면 먼저 hello가 실행되고 intro가 실행된다.
  • 23. Q/A
  • 25.