본문 바로가기
Java/Spring

[Build Tool] gradle이란?

by 오늘의개발부 2019. 7. 4.
반응형

Gradle

  1. 개념 : groovy 언어를 사용한 빌드 툴. 빌드, 테스트, 배포 자동화.
    • Projects : Gradle에서 Project는 Tasks (이하 태스크) 의 집합체이다. build.gradle을 일컫기도 하며, 단일 혹은 멀티 프로젝트로 구성할 수 있다.
      • Tasks : 프로젝트에는 하나 이상의 태스크가 필요하다. 각각의 태스크는 빌드를 수행하는 작업의 일부라고 볼 수 있으며 상호 의존한다. 하나의 태스크는 특정 순서대로 실행되는 Action(행위)들을 포함한다.
      • Plugin : 태스크와 Convention(관례)의 집합으로 프로젝트에 적용 될수 있다. 예를 들어 프로젝트에 java 플러그인을 적용하면 class 컴파일, JAR 만들기, javadoc생성, 혹은 빌드 결과물을 repository에 배포하는 작업 등을 할 수 있다.
  • 구성 : 모든 빌드는 하나 이상의 project로 구성. 또한 project는 하나 이상의 task로 구성 됨. (task는 빌드를 수행할 때 하나의 작업단위를 의미)

  • 빌드 과정 :
    gradle 커맨드를 이용해 빌드를 시작한다. 먼저 현재 디렉토리에서 build.gradle(빌드 스크립트) 파일을 찾는다. 여기에 project와 그에 맞는 task를 정의한다.

     task hello <<{
          println 'Hello World'
     }
    

Gradle 설정 관련 Groovy 기본 언어

  1. 변수 선언
  • def : 로컬 변수, 해당 스크립트 로컬에서만 접근 가능

  • ext : 전역 변수, 프로젝트 전체와 서브 프로젝트에서 접근 가능

    ext {
      springVersion = "5.1.4.RELEASE"
    }
  1. Closure
  • 더 검색 필요

    dependencies {
      // 외부 Library
      compile fileTree(dir: '../libs', includes: ['*.jar'])
      //compile "com.onlinepowers:opframework:3.0.0"
      compile "org.springframework.data:spring-data-jpa:$
    }
  1. List와 Map Literal

    test.includes = ['org/gradle/api/**', 'org/gradle/internal/**']
    List<String> list = new ArrayList<String>()
    list.add('org/gradle/api/**')
    list.add('org/gradle/internal/**')
    test.includes = list
    apply plugin: 'java'  
    Map<String, String> map = new HashMap<String, String>()  
    map.put('plugin','java')  
    apply(map)
  2. Left Shift Operator(<<)

  • doLast method와 같음

    task first{  
    doFirst{  
    println 'Running first'  
    }  
    } task second{  
    doLast { Task task ->  
    println "Running ${task.name}"  
    }  
    } task third << { taskObejct ->  
    println 'Running ' + taskObject.name  
    }
  • doFirst/doLast 는 여러 개 선언될 수 있으며 doFirst가 선언된 순서로 먼저 실행되고 그 뒤에 doLast가 선언된 순서대로 실행된다.

  • 실행 결과

    :first  
    Running first  
    :second  
    Running second  
    :third  
    Running third

build.gradle Script 작성

  1. plugin 설정
  • java project를 빌드하는 과정에서 source file compile, 단위 테스트, jar 파일 생성 등의 단계는 gradle의 "java plugin"이 task로 포함하고 있어서 모든 과정이 내부적으로 수행된다.
apply plugin: 'java'  
apply plugin: 'war'
  1. 버전 명시 및 jar manifest 속성 추가
  • 프로젝트에 추가한 자바 버전을 명시한다. 또한 manifest에 속성을 추가할 수 있다.
sourceCompatibitity = 1.8  
version = '1.0'
springVersion = "5.1.4.RELEASE"  
logBackVersion = "1.0.6'
jar {  
    manifest {  
        attributes 'Implementation-Title':'springmvc-hellogradle'  
    }  
}
  1. repositories 명시
  • java 프로젝트는 외부 JAR 파일에 의존할 경우가 많아 프로젝트에 jar 파일을 추가하기 위해 repository에 존재해야 한다. Maven에서 사용하듯이 repository는 프로젝트의 dependencies를 가져올 때 또는 artifact의 배포에 사용할 수 있다.
    repository 정의는 default 값이 없으므로 꼭 정의가 필요하다.
repositories{ // 'mavenCentral' 을 사용하면 기본 Maven repository를 사용한다.  
    mavenCentral()  
}
repositories{ // local 저장소를 참조하여 사용할 수도 있다.  
    ivy {  
        url "../local-repo"  
    }  
}
repositories{ // maven{}을 여러 번 사용하는 것이 가능하며, 사용자 정의 repository에 접속 계정 정보를 추가할 경우이다.  
maven {  
  credentials {  
    username 'user'  
        password 'password'  
    }  
    url "[http://repo.mycompany.com/maven2"](http://repo.mycompany.com/maven2")  
  }  
}
  1. 의존성 구성
  • Java와 의존성 관리
    Java에서 의존성은 Configurations으로 그룹화된다. 구성의 각 그룹은 classpath를 의미한다. 많은 Gradle 플러그인이 의존성 구성을 미리 정의해두고 있다. 또한 사용자가 스스로 자신만의 구성을 추가할 수도 있다(build시에는 필요 없지만 배포는 같이 되어야 하는 추가 JDBC 드라이버 같은 것들).
    프로젝트 구성은 configurations 객체로 관리한다. configurations 객체에 클로저를 전달하면 이 클래스의 API가 호출된다.
    기본적으로 네 가지 configuration이 존재한다.
configurations discription
compile 프로젝트를 컴파일할 때 필요한 의존성 라이브러리 추가
runtime 프로젝트를 실행할 때 필요한 의존성 라이브러리 추가(기본적으로 컴파일 타임을 포함한다)
testCompile 테스트 소스 프로젝트에서 컴파일 시 필요한 의존성 추가(기본적으로 컴파일 된 클래스와 컴파일 의존성을 포함한다)
testRuntime 테스트가 실행될 때 필요한 의존성을 추가한다(기본적으로 컴파일, 런타임, 테스트 컴파일의 의존성을 포함한다
  • 외부 모듈 의존성 추가 방식
dependencies { // 맵 지정 방식  
  compile group : 'org.hibernate', name : 'hibernate-core', version: '3.6.7.Final'  
 }
dependencies { // 문자열 지정 방식  
  compile 'org.hibernate.hibernate-core:3.6.7.Final'  
}
  • 의존성이 선언되면 그에 맞는 기술자 파일(pom.xml, ivy.xml)을 찾고 그에 따라 해당 모듈의 artifact jar 파일과 그 의존 파일들을 다운로드 한다.
  1. 자바 프로젝트를 빌드하는 기본 과정
    • production java 코드(src/main/java 소스코드)를 컴파일한다.
    • pruduction resources(src/main/resources)을 컴파일 output 디렉토리에 복사한다
    • test java 코드(src/test/java 소스 코드)를 컴파일 한다.
    • test resources(src/test/resources)을 컴파일 output 디렉토리에 복사한다
    • test 소스 코드를 실행해 테스틀 진행한다.

참고 링크

  1. https://jojoldu.tistory.com/123
  2. https://jjaekjjaek.tistory.com/entry/Gradle-%EA%B0%80%EC%9D%B4%EB%93%9C%EB%9D%BC%EC%9D%B8
반응형