[컴] Gradle 을 사용해야 하는 이유(원본 : Why Build Your Java Projects with Gradle Rather than Ant or Maven?)



Gradle in Action 의 저자가 Dr dobbs 에 Gradle 에 관한 글을 썼다.

관련 내용을 내 멋대로 정리 해 봤다.^^;;;


Gradle 특징

  1. build-by-convention approach 를 따른다.
  2. JVM 기반 build tool 이다.
  3. 기존의 dependency management infrastructure 인 Maven 이나 Ivy 같은 녀석들과도 호환된다.
  4. 여러 프로젝트의 빌드를 정의, 구성하고, 프로젝트간의 dependecy 들을 모델링하는데에 강력한 툴을 제공한다.



기존의 JVM-언어 build tool 들과 비교

Maven 은 configuration 에 convention 을 사용하는(convention-over-configuration) 의 paradigm 을 사용한다. 이런 방법은 application 을 합치는 방법이 명확할 때 유용하다.

만약 여러 다른 convention 들을 사용하는 기존의 project 들에서 작업을 한다면 어떨까?

Maven 에서는 한 project 에서 하나의 artifact 를 사용해야만 한다. 예를 들면 하나의 jar 만 만들 수 있다. 그럼 하나의 소스트리에서 어떻게 2개의 jar 을 만들 수 있을까? 이를 위해서는 2개의 project 를 만들어야만 한다. 아니면 새로운 tool 을 도입해서 해결할 수도 있다.


XML

hierarchical data 를 표현하는데에는 좋다. 하지만 program flow 를 표현하거나 조건부 논리(conditional logic) 을 표현하는데에는 약하다.

ANT

  • ant 는 유연하다.
  • 하지만 각각의 build script 가 unique 하고 이해하기 어렵다.
  • external library를 repository 에서 가져오는 기능이 없기 때문에 version checking 하는 부분이 필요하다.
  • 여러 프로젝트의 layout 들을 합치기 통일하기 위해서는 기업은 standard 를 정의해야 했다.


Maven

  • 2004 년 7월에 release 됐다.
  • dependency 관리, directory 구조, standardized project(표준화된 프로젝트) 를 제공했다.
  • custom logic 은 구현하기 어려웠다.
  • Maven 의 convention 들을 깨기 위해서는 Mojo 라는 plugin 을 만들어야 했다.
  • mojo 는 만들기 어렵고 너무 복잡하다.
  • 2005년 Maven 2 에서 여러 module 로 이뤄진 proejct 들은 각 module의 dependency 를 정의할 수 있었다.



Apache library Ivy

  • Ant 가 Ivy 를 integrated 했다.
  • project 의 compile 과 packaging process 에서 필요한 dependency 를 명확하게 언급하기 위해 Ant 에 integrated 됐다.
  • dependency 에 걸려있는 library 에서 필요로 하는 library 가 있다면 그 library 를 알아서 처리해 줬다.(이것을 transitive dependency 라고 필자는 이야기한다.)



build tool 의 추세

build 를 정의하기 위해 XML 을 사용하는 것에서 좀 더 표현적이고 읽기 좋은 언어로 옮겨가는 것 같다.
Ant 를 Groovy 로 작성할 수 있는 Gant
Maven Polyglot 은 maven 을 Groovy, Ruby, Scala, Clojure 로 작성할 수 있게 해준다.


gradle 이 각 build tool 에서 가져온 장점들

  • ant : flexibility / full control / chaining of targets
  • ivy : dependency management
  • maven : convention over configuration / multimodule projects / extensibility via plugins
  • gant : Groovy DSL(Domain specific language) on top of Ant















댓글 없음:

댓글 쓰기