IT_Programming/Dev Tools

[Gradle] Gradle을 이용한 자동화 빌드

JJun ™ 2015. 4. 10. 18:28

[참고하면 좋은 자료]

gradle로 안드로이드 앱 빌드하기.pdf




 출처: http://www.nextree.co.kr/p2437/





많은 경험은 아니지만 내가 경험한 몇개의 프로젝트에서 빌드툴인 Maven1 또는 Maven2을
사용하였다. 처음부터 Maven에 대한 지식이 없었기 때문에 이해하기가 다소 어려웠고
설정에 대한 부담이 매우 컸다. 

그리고 개인차가 있겠지만 생각보다 빌드가 느리고 종종 빌드가 되지않아 이클립스 프로젝트에서는 clean을 수행해야 했던 경우가 많았다.

Maven의 핵심기능인 의존성은 오히려 문제가 발생하기 쉬웠고 해당 기능을 잘 이해하지 않으면
이점을 단점으로 바꿔지기 쉽상이였다. Maven을 잘 쓰기 위해서는 모듈개념을 이해할 뿐더러
상속, 집합, 의존 관계 개념을 습득한 이후에 사용하는것을 권장한다.

그리하여 다른 빌드 툴을 알아본 결과 Maven과 Ant의 이점을 모아 Grooby DSL을 기반으로한
Gradle을 알게되어 간단하게 설명하고자 한다.


=========================================================
 gradle 소개
=========================================================

gradle은 진화된 빌드툴로 빌드, 테스트, 배포, 개발 등을 자동화 할수 있다.
gradle은 Ant의 유연성과 효과적인 빌드툴인 maven의 편리성의 조합하여 많은 오픈소스 프로젝트의 빌드 시스템으로 빠르게 채택되었다.
현재 스프링 오픈소스 프로젝트도 gradle로 빌드시스템을 변경했다.


=========================================================
gradle특징
=========================================================

1. Groovy 기반의 DSL(Domain Specific Language)을 사용
2. 의존성을 기반 프로그래밍을 위한 언어
3. 빌드의 구조화
4. API 제공
5. Multi 프로젝트 빌드
6. dependencies 관리의 다양한 방법 제공(의존성을 관리하는 다양한 방법을 제공)
7. migration의 편이성
8. build script는 xml이 아닌 grooby로 작성
8. 오픈소스로 제공


=========================================================
 gradle 을 이용한 Java Project 빌드
=========================================================

1. java plugin 이란?
많은 java 프로젝트들은 비슷하다. 예를들어 java project를 빌드하는 과정은 source file compile, 단위테스트 그리고 jar파일 생성이라고 한다면 이 일련의 단계들을 gradle java plugin이 task로
포함하고 있어서 java plugin을 선언하면 이 모든 과정들이 내부적으로 수행되어 진다.
왜냐하면 task들이 미리 선언되어 있기 때문이다.


2. java project 의 build.gradle에 plugin 선언

 - apply plugin: ‘java’

[그림1. java plugin 추가]

 

3. 외부 jar dependency 추가
java 프로젝트는 외부 JAR 파일들에 의존할 경우가 많은데 프로젝트에 jar 파일들을 추가하기 위해서는 repository에 존재해야한다. Maven repository 에서 사용하듯이 repository는 프로젝트의 dependencies를 가져올때 또는 artifacts의 배포에 사용될 수 있다.
먼저 repositories을 위해 다음과 같이 선언한다.

 - repositories {
mavenCentral()
   }

그리고 dependencies를 추가하기 위해서 compile group과 같은 몇몇의 필수요소를 선언한다.

- dependencies {
    compile group: ‘commons-collections’, name: ‘commons-collections’, version: ’3.2′
    testCompile group: ‘junit’, name: ‘junit’, version: ’4.+’
  }

[그림2. 외부 jar dependency 추가]


4. 프로젝트 customizing
java plugin은 프로젝트에 많은 속성을 추가하는데 이러한 속성들은 시작하는데에 충분한 기본값을 가지고 있다. 소스에서 사용되는 자바 버전에 덧붙여 다음과 같이 버전을 명시할 것이다. 또한 JAR manigest에 몇가지 속성을 추가할 수 있다.

- sourceCompatibility = 1.5
  version = ’1.0′
  jar {
     manifest {
        attributes ‘Implementation-Title’: ‘Gradle Quickstart’, ‘Implementation-Version’: version
     }
  }

 [그림3. 프로젝트 customizing 추가]


5. JAR 파일 배포
jar 파일로 만들기 위해서는 다음과 같이 gradle uploadArchives을 명시해야 한다.

- uploadArchives {
    repositories {
       flatDir {
           dirs ‘repos’
       }
     }
  }


6. Eclipse 프로젝트 생성
Eclipse로 프로젝트를 import시키기 위해서는 다음코드를 추가해야한다.
 - apply plugin: ‘eclipse’


7. 요약
- 해당경로에서  gradle build 하면 java 플러그인을 실행시겨서 jar 파일을 생성한다.
위에서 언급한속성들을 추가하여 후 command를 통한 빌드 실행 결과이다. 
그림 1, 2, 3와 같이 코드를 추가한 후에 빌드를 해보면 다음 그림4와 같은 수행결과를
볼 수가 있다.

[그림4. build.gradle 빌드 수행 결과]

다음은 위에서 빌드한 java 프로젝트의 최종파일로 build 하위로 libs안에 최종jar파일을
확일 할 수 있다.

                           [그림5. Java 프로젝트 수행결과 패키지 구조]
 

 



=========================================================
 eclipse에 적용
=========================================================

 

1. marketplace에서 gradle을 install하여 Gradle Project를 생성한다.
2. Gradle Project를 생성할때 Sample Project의 Java QuickStart로 생성하면
   간단한 예를 볼수 있다. 기본으로 제공되는 구조는 다음과 같다.

 [그림6.  Gradle 샘플 프로젝트 패키지 구조]

3. 프로젝트를 빌드의 수행결과로 다음과 같다. 내부 task들이 가지고 있는 속성들이
    자동으로 빌드 되어 진다.

[그림7.  Gradle 프로젝트 빌드 수행 결과]


 

- 마무리

Gradle을 실제 프로젝트에선 사용해보지는 못했지만 간단한 프로젝트를 통해 개념과 사용법을 익혀보았다. 내가 경험한 Maven보다는 쉬운 개념같았으나 처음 접하다 보니 다소 어색한 면이 있었다. 아직 Maven이 대중화된 빌드툴로 사용되어지고 있지만 Maven을 접하지 않은 사람에겐 접근하기 쉬운 Gradle을 추천하고 싶다. 

Groovy는 아직 경험하지 않아 적용하지 않았으나 자바 프로그래머들이 많은 학습을 하지 않고도 최신 프로그래밍 기법을 사용할 수 있다하여 향후 Gradle의 본질적으로 Groovy도 사용하여
프로젝트에서 진행해보고 싶다.

 


gradle로 안드로이드 앱 빌드하기.pdf
2.56MB